shell中字符提取命令awk和cut的不同
2017-12-10 23:11
841 查看
shell编程中,用于字符提取或者截取的命令有3个,分别是cut,awk,sed,严格的说,sed不能说字符截取命令,他是字符替换命令,在这里,我们总结一下cut和awk的不同:
它得每一列之间是使用 空格作为分隔符的,但是看第一列和第二列,空格不只有一个,如果想当然的使用cut 命令,以空格作为分隔符,输出第五列使用率,会出错
结果前六行和最后一行是空的,只有第七行的第五列输出来了
如果使用awk命令:
正确输出,课件,awk默认是以空格作为分隔符,当一个文件的列之间有多个空格并且数量不一定时,使用awk能够很好解决。
可是,cut 可以使用 -d 来指定分隔符,awk怎么指定呢?
使用BEGIN和FS
举个例子:
可以看出,是以“:”作为分隔符的
其中 单引号中的BEGIN{FS=”:”}就是指定 “:”为分隔符
其他的不同,等我发现了再补充。
1命令的使用格式不同
cut
cut [选项] 文件名 ·选项可以为: -f 列号 : 提取第几列 -d 分隔符 :按照指定的分隔符将一行分割成数列,cut默认的分隔符是制表符
awk
awk '条件1{动作1}条件2{动作2}......条件n{动作n}' 文件名 条件:一般使用关系表达式作为条件,比如大于号 ">" ,小于号 "<" 动作:包括,格式化输出 和 流程控制语句
2默认的分隔符的不同:
cut默认的分隔符是制表符,而awk 默认的分隔符是空格 或者 制表符,当一个文件中,每一行都含有 空格 时,要使用awk ,否则会出现错误: 比如:df 这个文件 [root@localhost japan]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/cl-root 16G 6.9G 9.2G 43% / devtmpfs 473M 0 473M 0% /dev tmpfs 489M 80K 489M 1% /dev/shm tmpfs 489M 7.1M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 1014M 173M 842M 18% /boot /dev/mapper/cl-home 1017M 59M 959M 6% /home tmpfs 98M 52K 98M 1% /run/user/0
它得每一列之间是使用 空格作为分隔符的,但是看第一列和第二列,空格不只有一个,如果想当然的使用cut 命令,以空格作为分隔符,输出第五列使用率,会出错
[root@localhost japan]# df -h | cut -d " " -f 5 59M
结果前六行和最后一行是空的,只有第七行的第五列输出来了
如果使用awk命令:
[root@localhost japan]# df -h | awk '{print $5}' Use% 43% 0% 1% 2% 0% 18% 6% 1%
正确输出,课件,awk默认是以空格作为分隔符,当一个文件的列之间有多个空格并且数量不一定时,使用awk能够很好解决。
可是,cut 可以使用 -d 来指定分隔符,awk怎么指定呢?
使用BEGIN和FS
举个例子:
#看一下这个文件 cat /etc/passwd [root@localhost japan]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
可以看出,是以“:”作为分隔符的
[root@localhost japan]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}' root 0 amandabackup 33 shizengqiang 1000 user1 1002 [root@localhost japan]#
其中 单引号中的BEGIN{FS=”:”}就是指定 “:”为分隔符
其他的不同,等我发现了再补充。
相关文章推荐
- [Shell]字符截取命令:cut, printf, awk, sed
- Shell 字符截取命令:cut, printf, awk, sed
- [Shell]字符截取命令:cut, printf, awk, sed
- shell脚本--cut命令与awk简单使用
- 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
- 字符截取命令(cut、printf、sed、awk)
- linux常用文本字符分割分析awk和cut命令
- 字符截取-cut字段提取命令
- Linux CentOS 7 shell中的特殊字符及与管道相关的命令(cut,sort,wc,uniq,tee,tr,split)
- Shell字符操作命令——grep、sed、awk
- shell字符截取命令之cut命令
- Shell 常用字符处理命令cut/sort/wc/uniq/tee/tr/split
- shell字符截取命令之awk命令
- shell 脚本之 cut awk sed 命令详解
- Linux 字符截取命令 cut printf awk sed
- shell字符截取命令之cut命令的实例详解
- Shell基础(四):正则表达式、cut、awk、sed命令
- cut 命令 通过列来提取文本字符
- 一天一个shell命令 linux文本内容操作系列-awk命令详解
- Shell 学习7(awk命令)