您的位置:首页 > 其它

awk工具使用

2018-03-10 17:08 141 查看
-F ':' 指定分隔符 $1第一列

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

$1"#"$3

[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列

[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

多个条件匹配

[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的行

[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加双引号,代表字符,不是数字

第三列不等于1000的行

[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

第三列大于第四列

[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="#"}

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: