awk工具
1.指定分割符,并打印出指定段
[root@weix-01 awk]# awk -F ':' '{print $1}' test.txt #分割符: 打印第一段$1
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
postfix
sshd
chrony
weixing01
weixing02
2.打印所有段:$0
[root@weix-01 awk]# awk '{print $0}' test.txt
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
weixing01:x:1000:1000::/home/weixing01:/bin/bash
weixing02:x:1001:1001::/home/weixing02:/bin/bash
3.不指定分割符,默认空白字符为分割:
[root@weix-01 awk]# awk '{print $1}' 1.txt
1
aa
bb
[root@weix-01 awk]# cat 1.txt
1 2
aa hh
bb cc
4.打印多段时,用,实现
[root@weix-01 awk]# awk -F ':' '{print $1,$3,$5}' test.txt
root 0 root
bin 1 bin
daemon 2 daemon
adm 3 adm
lp 4 lp
sync 5 sync
shutdown 6 shutdown
5.段与段之间可以用字符区分:#需要用“”扩起来
[root@weix-01 awk]# awk -F ':' '{print $1"#"$3"#"$5}' test.txt
root#0#root
bin#1#bin
daemon#2#daemon
adm#3#adm
lp#4#lp
sync#5#sync
6.匹配功能:
[root@weix-01 awk]# awk '/oo/' test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
7.针对段来进行匹配:
[root@weix-01 awk]# awk -F ':' '$1~/oo/' test.txt #第一段中匹配oo字符
root:x:0:0:root:/root:/bin/bash
8.支持正则表达式:
[root@weix-01 awk]# awk -F ':' '$1~/o+/' test.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
9.多个表达式一起:
[root@weix-01 awk]# awk -F ':' '/root/ {print $1,$3}/wei/ {print $1,$3,$4}' test.txt
root 0
operator 11
weixing01 1000 1000
weixing02 1001 1001
[root@weix-01 awk]# egrep 'root|wei' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
weixing01:x:1000:1000::/home/weixing01:/bin/bash
weixing02:x:1001:1001::/home/weixing02:/bin/bash
10.上面的也可以通过正则表达实现:
[root@weix-01 awk]# awk -F ':' '/root|wei/ {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
weixing01:x:1000:1000::/home/weixing01:/bin/bash
weixing02:x:1001:1001::/home/weixing02:/bin/bash
11.数学计算符的一些应用:
[root@weix-01 awk]# awk -F ':' '$3==0 {print $1}' test.txt
root
[root@weix-01 awk]# awk -F ':' '$3>=1000 {print $1}' test.txt
weixing01
weixing02
[root@weix-01 awk]# awk -F ':' '$3>=1000 {print $0}' test.txt
weixing01:x:1000:1000::/home/weixing01:/bin/bash
weixing02:x:1001:1001::/home/weixing02:/bin/bash
[root@weix-01 awk]# awk -F ':' '$3>="1000" {print $0}' test.txt #加上“”表示字符
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
weixing01:x:1000:1000::/home/weixing01:/bin/bash
weixing02:x:1001:1001::/home/weixing02:/bin/bash
12.两个段之间进行比较:
[root@weix-01 awk]# awk -F ':' '$3<$4' test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@weix-01 awk]# awk -F ':' '$3==$4' test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
weixing01:x:1000:1000::/home/weixing01:/bin/bash
weixing02:x:1001:1001::/home/weixing02:/bin/bash
[root@weix-01 awk]# awk -F ':' '$3>1000||$7=="/sbin/nologin"' test.txt
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
weixing02:x:1001:1001::/home/weixing02:/bin/bash
13.使用OFS命令设置段之间间隔符
[root@weix-01 awk]# awk -F ':' '{OFS="#"} $3>1000 || $7 ~ /bash/ {print $1,$3,$7}' test.txt
root#0#/bin/bash
weixing01#1000#/bin/bash
weixing02#1001#/bin/bash
[root@weix-01 awk]# awk -F ':' '{OFS="#"} {if($3>1000) {print $1,$3,$4,$5}}' test.txt
weixing02#1001#1001#
14.NR:打印行数
[root@weix-01 awk]# awk -F ':' '{print NR":"$0}' test.txt
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
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
15.NF:打印本行有多少段
[root@weix-01 awk]# awk -F ':' '{print NF":"$0}' test.txt
7:root:x:0:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
7:halt:x:7:0:halt:/sbin:/sbin/halt
7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
7:operator:x:11:0:operator:/root:/sbin/nologin
16.NR,NF可以当判断条件:
[root@weix-01 awk]# awk -F ':' 'NR<=10' test.txt #打印前十行
root:x:0:0:root:/rooti/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
operator:x:11:0:operator:/root:/sbin/nologin
[root@weix-01 awk]# awk -F ':' 'NF==6' test.txt
root:x:0:0:root:/rooti/bin/bash
17.一个=:赋值
[root@weix-01 awk]# head -n 3 test.txt |awk -F ':' '$1="root"'
root x 0 0 root /rooti/bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin
[root@weix-01 awk]# head -n 3 test.txt |awk -F ':' '{OFS=":"}$1="root"'
root:x:0:0:root:/rooti/bin/bash
root:x:1:1:bin:/bin:/sbin/nologin
root:x:2:2:daemon:/sbin:/sbin/nologin
18.求和:
[root@weix-01 awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt #第三段求和
4606