awk是一个数据处理工具。与sed处理整行数据相比。awk则比较倾向将一行分成数个“字段”来处理。
awk通常运行的格式是这样的:
awk '条件类型1 {动作1} 条件类型2 {动作2} ...' filename
变量名的含义
NR:当前的行号
NF:当前行的字段总数
FS:目前的分隔符,默认是空格
lhj@lhj-virtual-machine:~$ last -n 5|awk '{print $1 "\t" $2}'
结果:
lhj pts/0lhj tty7(unknown tty7reboot systemlhj tty7
lhj@lhj-virtual-machine:~$ cat /etc/passwd|awk '(FS=":") {if($3<10){print $1 "\t" $3 }}'或者lhj@lhj-virtual-machine:~$ cat /etc/passwd|awk -F":" '{if($3<10){print $1 "\t" $3}}'
第一条命令的结果:
root:x:0:0:root:/root:/bin/bash daemon 1bin 2sys 3sync 4games 5man 6lp 7mail 8news 9
第二条命令的结果:
root 0daemon 1bin 2sys 3sync 4games 5man 6lp 7mail 8news 9
第一条命令的FS是域分隔符,读第一行的时候分隔符还是默认的空格,其作用是从第二行开始生效。不过可以在FS前面增加BEGIN关键字,告诉awk要从第一行开始生效
lhj@lhj-virtual-machine:~$ cat /etc/passwd|awk 'BEGIN {FS=":"} {if($3<10){print $1 "\t" $3 }}'root 0daemon 1bin 2sys 3sync 4games 5man 6lp 7mail 8news 9
awk还可以做列的运算,例如
lhj@lhj-virtual-machine:~$ cat /etc/passwd|awk 'BEGIN {FS=":"} {if($3<10){s+=$3}} END {print s}'45