awk命令

1、应对一般的字符串截取,cut命令也可以完成,但是cut有很大局限性,无法识别多个空格

cut命令的一般格式:cut -d " " -f 5   (以空格为分隔符,截取第五个字符)

举个例子:

df -h | cut -d " " -f 5 

这个输出的结果会为空,因为df -h 由于他本身的格式,会出现多个空格,cut会认为每一个空格都是一个分隔符,这个截取到的第五个字符也是众多空格当中的一个

 

在这种情况下,就需要使用更加复杂的awk命令

 

awk命令

awk的读取数据形式是按行读取,但是按列处理

一般语法: awk '条件1{动作1}条件2{动作2} ...' 文件名

例子:

student.txt文件

ID  Name  PHP  Linux  MySQL  Average

1  xiaoming  82  95   86    87.66

2  xiaohong  74  96   87    85.66

3  xiaoli    99  83    93    91.66

awk '{printf $2 "\t" $6 "\n"}' student.txt 

# 注意printf前面有大括号,代表printf是动作1,动作1前面没有条件1,代表这个动作对整个文件执行

# $2表示第二列,$6表示第六列,所以awk的工作模式是先读取第一行,截取第二列 (Name),和第六列(Average),如果是$0,则截取整个第一行

# \t表示一个tab,\n表示换行

#综上,这个命令的意思是截取整个文件第二列,打个tab,再截取第六列,然后换行,所以结果为:

Name  Average
xiaoming  87.66
xiaohong  85.66
xiaoli   91.66

 

BEGIN \ END

BEGIN的作用就是在真正读取数据之前做的动作, 注意:全大写!

最常见的最实用的作用是:指定分割符!

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

End的作用和BEGIN相反,所有数据执行完之后最后执行一次。

 

posted on 2018-09-11 12:06  TheExile  阅读(138)  评论(0)    收藏  举报

导航