awk工具使用

 

 -F ':' 指定分隔符   $1第一列linux

[root@glinux-01 ~]# awk -F ':' '{print $1,$3}' pw.txt |head -5
root 0
bin 1
daemon 2
adm 3
lp 4

$1"#"$3c#

[root@glinux-01 ~]# awk -F ':' '{print $1"#"$3"#"}' pw.txt |head -5
root#0#
bin#1#
daemon#2#
adm#3#
lp#4#

匹配含有oo的行    '/oo/{print $1,$2,$3}'匹配含有oo的行,並打印123列bash

[root@glinux-01 ~]# awk '/oo/' pw.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
[root@glinux-01 ~]# awk -F ':' '/oo/{print $1,$2,$3}' pw.txt 匹配含有oo的行,並打印123列
root x 0 
lp x 4
mail x 8
operator x 11
postfix x 89

 在第一列中匹配含有oo行函數

[root@glinux-01 ~]# awk -F ':' '$1 ~ /oo/' pw.txt
root:x:0:0:root:/root:/bin/bash

多個條件匹配post

[root@glinux-01 ~]# awk -F ':' '/root/{print $1,$2} /ggg/ {print $1}' pw.txt//若是一行中有兩個關鍵詞打印兩次
root x
operator x
ggg1
ggg2
[root@glinux-01 ~]# awk -F ':' '/root|ggg/ {print $1}' pw.txt 或者這樣寫
root
operator
ggg1
ggg2

條件判斷 第三列大於1000的行spa

[root@glinux-01 ~]# awk -F ':' '$3>=1000' pw.txt
ggg1:x:1000:1000::/home/ggg1:/bin/bash
ggg2:x:1001:1001::/home/ggg2:/bin/bash
g1:x:1002:1002::/home/g1:/bin/bash

awk -F ':' '$3>="1000"' pw.txt  若是1000加雙引號,表明字符,不是數字code

第三列不等於1000的行it

[root@glinux-01 ~]# awk -F ':' '$3!=1000' pw.txt|head -5
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

第三列大於第四列awk

[root@glinux-01 ~]# awk -F ':' '$3>$4' pw.txt|head -5
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin

[root@glinux-01 ~]# awk -F ':' '$3>$4 && $3<=7' pw.txt|head -5
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

[root@glinux-01 ~]# awk -F ':' '$3>$4 && $3<=7 && $7 ~ /sbin/' pw.txt|head -5 //而且第7行含有sbin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

更換分割符{OFS="#"}mail

[root@glinux-01 ~]# awk -F ':' '{OFS="#"}{print $1,$2}' pw.txt|head -5
root#x
bin#x
daemon#x
adm#x
lp#x

[root@glinux-01 ~]# awk -F ':' '{OFS="#"} $3>$4 {print $1,$2}' pw.txt|head -5
sync#x
shutdown#x
halt#x
operator#x
polkitd#x

[root@glinux-01 ~]# awk -F ':' '{OFS="#"} {if($3>$4) {print $1,$2}}' pw.txt|head -5同上一條

 打印行號 print NR

[root@glinux-01 ~]# awk -F ':' '$3>$4 {print NR ":" $1}' pw.txt|head -5
6:sync
7:shutdown
8:halt
10:operator
16:polkitd

打印有幾列 NF

[root@glinux-01 ~]# awk -F ':' '$3>$4 {print NF ":" $1}' pw.txt|head -5
7:sync
7:shutdown
7:halt
7:operator
7:polkitd

也可用NR,NF作條件判斷 'NR>10 || NF<5 {print $1}'

將第一列更改成root,可是會去掉分隔符,須要用OFS添加

[root@glinux-01 ~]# awk -F ':' '$1="root"' pw.txt|head -3
root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin

[root@glinux-01 ~]# awk -F ':' '{OFS=":"}$1="root"' pw.txt|head -3
root:x:0:0:root:/root:/bin/bash
root:x:1:1:bin:/bin:/sbin/nologin
root:x:2:2:daemon:/sbin:/sbin/nologin

函數運算,將第三列累加,並打印

[root@glinux-01 ~]# awk -F ':' '{(sum=sum+$3)};END {print sum}' pw.txt
5608
相關文章
相關標籤/搜索