首页 > 服务器学习 > Linux > bash中的字符截取命令cut和awk
2016
12-16

bash中的字符截取命令cut和awk

grep也是字符截取命令(本笔记在查找命令中),是从文件中截取符合条件的行,其他常见的字符截取命令还有:

一、cut列提取命令:cut [选项] 文件名

-f m[,n]:指定提取第m列或第m到第n列

-d 分隔符:按照指定的分隔符分隔列(没有此选项默认列之间用TAB制表符)

如:cut -d ":" -f 1,3 /etc/passwd代表用冒号(:)作为分隔符,提取文件passwd中的第一和第三列

该命令一般是和行截取命令grep结合使用的。

一般情况下cut不能使用空格作为分隔符,所以除了以空格作为分隔符的内容之外,都可以使用cut。

二、awk列提取命令,比cut命令复杂但是功能强大,能实现更为复杂的逻辑判断或循环等。

在awk命令中的输出支持print和prinft命令:

print:会在每个输出之后自动加入一个换行符(Linux默认没有print命令,只能在awk命令之中使用)

printf:是标准格式输出命令,不会自动加入换行符。

awk '条件1{动作1} 条件2{动作2}...' 文件名

条件:一般使用逻辑表达式作为条件(如果不写则代表不进行任何判断直接执行后面的动作)

动作:格式化输出或流程控制语句等

df -h | awk '{printf $1 "\t" $5 "\n"}'

会打印设备文件名和所占空间百分比,这个内容如果使用cut命令由与列于列之间的空格数量不确定,所以不能实现,但是awk会自动识别,其中$1代表一行中的第一列,$5代表一行中的第五列,$0代表整行。

awk的处理机制是先读入指定的内容的第一行,再根据条件格式化输出,那么如果分隔符不是awk默认的制表符或空格的话,第一行是不会正确输出的,以后的行才能正确输出,这时我们取药加一个条件语句和一个指定分隔符语句,如:

awk 'BEGIN{FS=":"} {printf $1 "\t $3"}' /etc/passwd

条件BEGIN代表在命令读取文件之前先执行该语句,FS指定分隔符,如果没有BEGIN条件的话,第一行会整行输出。后面才正常输出。

条件END代表在文件读取输出的处理都完成以后才执行的操作。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。