awk是Linux下经常用到的资料处理工具,一般用来处里行结构比较统一的资料。前面讲到的资料处理工具sed是一行为单位来处理资料,而awk是按行把资料按照一定的字符(预设是空格和TAB)分栏,然后按栏为单位处理。和excel里的分裂比较类似。

    usage:awk '条件1{动作1} 条件2{动作2} 条件3{动作3}......' filename

    只有条件成立了才会执行相应的动作,即条件1成立就执行动作1,接着判断条件2,依次往后直至所有条件都判断完毕。

    awk对资料分栏后,每一栏就对应着一个变量,第一栏对应变量$1,第二栏对应变量$2依次类推,变量$0对应整行。awk处理资料的流程如下:

  1. 读入第一行,按设定的分隔符把第一行分栏,将处理的资料填入相应的变量$0,$1,$2......

  2. 判断条件1是否成立,决定是否执行动作1,然后判断条件2是否成立决定是否执行动作2,依次下去,直至所有的条件和动作都判断执行完毕;

  3. 若有后续的行资料,则重复前面2步动作,直至所有的资料都处理完毕为止;

    下面几个awk的内建变量最好牢记:

变量名称代表的意义
NF每一行拥有的栏位总数
NR当前处理的是第几行
FS目前的分隔符,预设为空白键
  • awk的逻辑运算符

    awk中能够使用的逻辑运算符如下:

运算符含义
>大于
<小于
>=大于等于
<=小于等于
==等于
!=不等于

 示例:

对/etc/passwd文件进行处理,取出当中的用户名和用户id

210131164.jpg

上图可见第一行不是想要的结果,是因为在设置FS=":"生效之前,第一行已经按默认的分隔符处理了,正确的处理方法如下:

210742800.jpg

如果只想显示前5行,可以如下处理:

211254820.jpg