awk是编辑,处理匹配到的文本内容
原文件
pyyu1 pyyu2 pyyu3 pyyu4 pyyu5
pyyu6 pyyu7 pyyu8 pyyu9 pyyu10
pyyu11 pyyu12 pyyu13 pyyu14 pyyu15
pyyu16 pyyu17 pyyu18 pyyu19 pyyu20
pyyu21 pyyu22 pyyu23 pyyu24 pyyu25
pyyu26 pyyu27 pyyu28 pyyu29 pyyu30
1、NR:行号 $0:一整行信息
[root@localhost ~]# awk 'NR==35,NR==40{print NR,$0}' /etc/passwd
35 ntp:x:38:38::/etc/ntp:/sbin/nologin
36 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
37 rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
38 nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
39 gnome-initial-setup:x:988:982::/run/gnome-initial-setup/:/sbin/nologin
40 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
2、NF列数
[root@localhost ~]# awk '{print $1,$(NF-1),$(NF-2)}' syh.txt
pyyu1 pyyu4 pyyu3
pyyu6 pyyu9 pyyu8
pyyu11 pyyu14 pyyu13
pyyu16 pyyu19 pyyu18
pyyu21 pyyu24 pyyu23
pyyu26 pyyu29 pyyu28
3、-F 指定分隔符
[root@localhost ~]# awk -F ":" '{print $1,$NF}' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
4、-F:输入分隔符 OFS:输出分隔符
[root@localhost ~]# awk -F ":" -v OFS="------" '{print $1,$NF}' /etc/passwd
root------/bin/bash
bin------/sbin/nologin
5、-v:定义或修改一个awk内部的变量
[root@localhost ~]# awk -v FS=":" '{print NR,NF,$1}' /etc/passwd
1 7 root
2 7 bin
3 7 daemon
6、BEGIN:处理文本前,先执行BEGIN模式指定的内容
[root@localhost ~]# awk 'BEGIN{print "山茶花开始用awk处理文本了"}' pwd.txt
山茶花开始用awk处理文本了
7、END:awk处理完所有指定文本,需要执行的操作
[root@localhost ~]# awk 'BEGIN{print "处理文本之前,awk执行了这个动作~~~"}{print $0}END{print "所有文本以及处理完毕,执行了END模式"}' tt.txt
处理文本之前,awk执行了这个动作~~~
asdfjkl;
qweruiop
zxcvnm,.
所有文本以及处理完毕,执行了END模式
8、//:正则表达式
[root@localhost ~]# awk -F ":" '/^games/{print $1,$NF}' /etc/passwd
games /sbin/nologin
9、以avahi开头,以syh结尾,打印行号和整行
[root@localhost ~]# awk '/^avahi/,/syh$/{print NR,$0}' /etc/passwd
41 avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
42 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
43 tcpdump:x:72:72::/:/sbin/nologin
44 aaa:x:1000:1000:aaa:/home/aaa:/bin/bash
45 syh:x:1001:1001::/home/syh:/bin/bash