awk,列过滤工具
格式:awk [选项] 参数 文件
-F 制定分隔符 -f调用脚本
' ' 引用代码块,包含所有内容;
/ / 匹配代码块,可以是正则表达式;
{ } 匹配代码块,可以包含一个或多个;
; 多命令使用分号分隔;
BEGIN{} 开始就执行的操作,必须是{}的内容;
END 结束执行的操作;
NR 每一行的行号;
NF 当前行的字段个数;
# 以冒号分隔打印第一列
awk -F":" '{print $1}' passwd
#NR代表行号,NF表示每行有几列
[root@Andy ~]# awk -F: '{print NR,NF}' passwd
1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 7
#每行添加行号
awk -F: '{print NR,$0}' passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#开始执行之前打印start,然后打印每一行,尾行执行stop
awk 'BEGIN{print "start"}{print }END{print "stop"}' passwd
#开始执行之前打印start,然后打印每行行号,最后打印end
awk -F: 'BEGIN{print "start"}{print NR}END{print"end"}' passwd
#先打印start,然后打印行号和$1的数据,最后打印END
awk -F":" 'BEGIN{print "start"}{print NR$1}END{print "END"}' passwd
start
1root
2bin
3daemon
#打印行号分号隔开换行打印内容
awk -F: 'BEGIN{print "START"}{print NR;print}END{print "END"}' passwd
START
1
root
2
bin
3
awk -F"/" '/bash$/{print}' passwd #打印以bash结尾的行
awk -F":" '/^root/{print $1}' passwd #打印以root开始的$1