awk
awk也是一个数据处理工具!相较于 sed 常常作用于一整个行的处理, awk 则比较倾向于一行当中分成数个字段来处理。
awk命令的基本格式为:awk [-F field-separator] 'commands' filename
其中,[-F域分隔符]是可选的,因为awk使用空格或tab键作为缺省的域分隔符。commands 是awk要执行的命令动作。filename是要处理的文件。
awk 的强大之处在于commands,它由2部分组成,分别为匹配规则和执行命令,如下所示:
'匹配规则{执行命令}'
awk命令的完整格式:awd [-F field-separator] '匹配规则{执行命令}' filename
任何awk语句都是由'匹配规则{执行命令}'组成,一个awk中可以有多个语句。匹配规则决定执行命令的执行条件。
例子:
awk '/^$/ {print "Blank line"}' test.txt
在此命令中,/^$/
是一个正则表达式,功能是匹配文本中的空白行
awk -F: '$7 ~ /bash$/ {print $1}' /etc/passwd
判断$7(第7个数据字段)的值是否匹配正则表达式/bash$/
匹配规则(即执行条件):
一般使用关系表达式作为条件。这些关系表达式非常多,具体参考下表:
条件类型 |
条 件 |
说 明 |
awk保留字 |
BEGIN |
在awk程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次 |
awk保留字 |
END |
在awk程序处理完所有数据,即将结束时执行。END 后的动作只在程序结束时执行一次 |
关系运算符 |
> |
大于 |
< |
小于 |
|
>= |
大于等于 |
|
<= |
小于等于 |
|
== |
等于。用于判断两个值是否相等。如果是给变童赋值,则使用"=” |
|
!= |
不等于 |
|
匹配表达式 |
~(匹配) |
value ~ /regexp/ 如果value匹配/regexp/,则返回真 |
!~(不匹配) |
value !~ /regexp/ 如果value不匹配/regexp/,则返回真 |
|
正则表达式 |
/正则表达式/ |
如果在“//”中可以写入字符,则也可以支持正则表达式,如:/root/表示匹配含有root的行。 |
逻辑运算符 |
&& |
逻辑与 |
|| |
逻辑或 |
执行命令(动作action):
awk的执行命令在大括号{ }内指明。动作大多数用来打印(即print指令),但是还有些更长的代码诸如if和循环语句及循环退出结构。如果不指明采取动作,awk将打印出所有浏览出来的记录。
动作(Action):
格式化输出(print);
流程控制语句(if、while、for等);
例如:显示passwd文件中第1个第6个字段的信息
awk -F: '{print $1 "\t" $6}' /etc/passwd