awk工具
awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容
awk包含几个特殊的内建变量(可直接用)如下所示:
FS:指定每行文本的字段分隔符,默认为空格或制表位;
NF:当前处理的行的字段个数;
NR:当前处理的行的行号(序数);
$0:当前处理的行的整行内容;
$n:当前处理的行的第n个字段(第n列);
FILENAME:被处理的文件名;
RS:数据记录分隔,默认为\n,即每行为一条记录。
1、按行输出文本
1.1输出所有内容,等同于cat test.txt
awk ‘{print}’ test.txt
1.2输出所有内容,等同于cat test.txt
awk ‘{print $0}’ test.txt
1.3输出第1~3行内容
awk ‘NR1,NR3{print}’ test.txt
1.4输出第1~3行内容
awk ‘(NR>=1)&&(NR<=3){print}’ test.txt
1.5输出第1行,第3行的内容
awk ‘NR1||NR3{print}’ test.txt
1.6输出所有奇数行的内容
awk ‘(NR%2)==1{print}’ test.txt
1.7输出所有偶数行的内容
awk ‘(NR%2)==0{print}’ test.txt
1.8输出以root开头的行
awk ‘/^root/{print}’ /etc/passwd
1.9输出以nologin结尾的行
awk ‘/nologin$/{print}’ /etc/passwd
1.10统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$” /etc/passwd
awk ‘BEGIN {x=0};//bin/bash$/{x++};END {print x}’ /etc/passwd
1.11统计以空行分隔的文本段落数
awk ‘BEGIN {RS=””} ;END{print NR}’ test.txt
2按字段输出文本
2.1输出每行中(以空格或制表符分隔)的第三个字段
awk ‘{print $3}’ test.txt
2.2输出每行中第1,3个字段
awk ‘{print $1,$3}’ test.txt
2.3输出密码为空的用户的shadow记录
awk -F ”:” ‘$2==””{print}’ /etc/shadow
2.4输出密码为空的用户的shadow记录
awk ‘BEGIN {FS=”:”} ; $2==””{print}’ /etc/shadow
2.5输出以冒号分隔且第7个字段中包含/bash的行的第一个字段
awk -F ”:” ‘$7~”/bash”{print $1}’ /etc/shadow
2.6输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段
awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services
2.7输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行
awk -F “:” ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd
3通过管道、双引号调用Shell命令
3.1调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$ ” /etc/passwd
awk -F: ‘/bash $/{print | “wc -l”}’ /etc/passwd
3.2调用w命令,并用来统计在线用户数
awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’
3.3.调用hostname,并输出当前主机名
awk ‘BEGIN {“hostname” | getline ; print $0}’