awk使用

2018-03-02  本文已影响0人  强出头

awk上

awk上

分段查询,指定分隔符

(打印第一段)
[root@localhost ~]# awk -F ':' '{print $1}' passwd1 |head -4
root
bin
daemon
adm
[root@localhost ~]# head -4 passwd1 
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
(打印所有段)
[root@localhost ~]# awk '{print $0}' passwd1 |head -4
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

分段查询不使用分隔符,则默认以空格或空白字符分割
打印多段可以以 ,或者其它指定符号分割

[root@localhost ~]# awk -F ':' '{print $1"#"$2"#"$3}' passwd1 |head -4
root#x#0
bin#x#1
daemon#x#2
adm#x#3

指定查询包含 oo 的行

[root@localhost ~]# awk '/oo/' passwd1 
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@localhost ~]# awk -F ':' '$1 ~ /oo/' passwd1 
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ':' '$1 ~ /oo+/' passwd1 
root:x:0:0:root:/root:/bin/bash

匹配并打印指定段

[root@localhost ~]# awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' passwd1 
root 0
operator 11

判断符号匹配

[root@localhost ~]# awk -F ':' '$3=="0"' passwd1 
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ':' '$3>="500"' passwd1 
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
nobody:x:99:99:Nobody:/:/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
(比较的是ASCII值比较的)
[root@localhost ~]# awk -F ':' '$3>=500' passwd1 
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash
[root@localhost ~]# awk -F ':' '$7!="/sbin/nologin"' passwd1 
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash

awk下

awk下

判断符号匹配

[root@localhost ~]# awk -F ':' '$3<$4' passwd1 
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@localhost ~]# awk -F ':' '$3>"5" && $3<"7"' passwd1 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# awk -F ':' '$3>1000 || $7=="/bin/bash"' passwd1 
root:x:0:0:root:/root:/bin/bash
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash

指定打印的后的分隔符

[root@localhost ~]# head -4 passwd1 |awk -F ':' '{OFS="#"}{print $1,$3,$4}'
root#0#0
bin#1#1
daemon#2#2
adm#3#4

增加判断语句

[root@localhost ~]# awk -F ':' '{OFS="#"}{if($3>1000){print $1,$3,$4}}' passwd1 
wsl1#1001#1001

显示行号

[root@localhost ~]# awk -F ':' '{print NR":"$0}' passwd1 |head -5
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

显示每行段数

[root@localhost ~]# awk -F ':' '{print NF":"$0}' passwd1 |head -5
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

行数小于10作为判断

[root@localhost ~]# awk -F ':' 'NR<=10' passwd1 
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
[root@localhost ~]# awk -F ':' 'NR<=10 && $1 ~ /root|syrnc/' passwd1 
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ':' 'NF<=10 && $1 ~ /root|syrnc/' passwd1 
root:x:0:0:root:/root:/bin/bash

NR和NF做参数

[root@localhost ~]# awk -F ':' '{print $NR":"$NF}' passwd1 |head -4
root:/bin/bash
x:/sbin/nologin
2:/sbin/nologin
4:/sbin/nologin

赋值

[root@localhost ~]# awk -F ':' '{OFS=":"}  $1="root"' passwd1 |head -4
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:x:3:4:adm:/var/adm:/sbin/nologin

计算第三段的和

[root@localhost ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' passwd1 
4606
上一篇下一篇

猜你喜欢

热点阅读