Awk命令由:awk+括在引号(或写在文件)中的程序指令+输入文件的文件名,这几部分组成。如果没有指定输入文件,输入则来自标准输入(stdin),即是键盘的输入。 其中程序指令指的是:匹配模式、操作(也就是前面讲的指定动作)或匹配模式与操作组合而成。
● 匹配模式指的是:某种类型的表达式组成的语句,例如正则表达式。
● 操作指的是:括在花括号“{}”里的一条或者多条语句组成,语句之间用分号或者换行符隔开。(有点像C语言的函数写法)
需要注意的是,匹配模式不能够括在花括号里面,匹配模式由括在两个正斜杠之间的正则表达式、一个或多个awk操作符组成的表达式组成。
Awk命令可以在命令行输入,也可以写在awk脚本文件里。要处理的文件行有来自文件、管道或标准输入。
● 文件的输入
格式1:
# awk ‘pattern’ filename
# awk ‘{action}’ filename
# awk ‘pattern {action}’ filename
|
范例 2-1
[root@localhost script]# cat 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
… … …
[root@localhost script]# awk '/rpc/' passwd
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
### 解析 ###
Awk打印出所有包含模式 rpc 的行。
范例 2-2
[root@localhost script]# awk -F ':' '{print $1}' passwd
root
bin
daemon
adm
lp
sync
… … …
### 解析 ###
Awk打印出文件passwd的第一个字段,其中“-F”选项指定分隔符为“:”。
范例 2-3
[root@localhost script]# awk -F ':' '/rpc/{print $1,$2}' passwd
rpc x
rpcuser x
### 解析 ###
当文件passwd匹配模式 rpc 时,awk打印该行的头两个字段。其中“-F”选项指定分隔符为“:”。
|
● 管道的输入
格式2:
# command | awk ‘pattern’
# command | awk ‘{action}’
# command | awk ‘pattern {action}’
范例 2-4
[root@localhost script]# cat /etc/passwd | awk -F ':' '$3 < 10'
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
news:x:9:13:news:/etc/news:
### 解析 ###
Cat命令打印/etc/passwd文件的输出通过管道发给awk。如果其中的某行的第3个字段小于10的,则被打印出来。
|