awk命令

回复 收藏
[root@awulinux ~]# awk -F ':' '{print $3}' 2.txt                截取文档中某段

[root@awulinux ~]# awk -F ':' '{print $3,$4}' 2.txt

[root@awulinux ~]# awk -F ':' 'OFS=":"{print $3,$4}' 2.txt        指定分隔符:
[root@awulinux ~]# awk -F ':' 'OFS="#"{print $3,$4}' 2.txt       指定分隔符#
[root@awulinux ~]# awk -F ':' 'OFS="#"{print $3,$4,$1}' 2.txt     


[root@awulinux ~]# awk '/user/' 2.txt          匹配字符或者字符串

[root@awulinux ~]# awk '/user|root/' 2.txt   多次匹配

[root@awulinux ~]# awk '/r*o/' 2.txt      表示匹配0个或者多个*前面的字符r,以及o

[root@awulinux ~]# awk '/r?o/' 2.txt     表示匹配0个或者1个?前面的r,以及o

[root@awulinux ~]# awk '/r+o/' 2.txt    表示匹配1个或者多个+前面的r,以及o

[root@awulinux ~]# awk '/r.*o/' 2.txt   .*表示匹配0个或者多个任意字符,包括空行

[root@awulinux ~]# awk '/(oo)+/' 2.txt    表示匹配1对或者多对oo

[root@awulinux ~]# grep -E --color 'o{2,10}' 2.txt   
[root@awulinux ~]# grep -E --color '(oo){2,10}' 2.txt

[root@awulinux ~]# awk '/(oo){2}/' 2.txt                 awk不支持{}

[root@awulinux ~]# awk -F ':' '$1~/r*o/' 2.txt     针对某个段匹配,第一段有o或者0个或者多个r的都可以匹配
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
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

[root@awulinux ~]# awk -F ':' '$1~/r*o/ {print $3}' 2.txt   只显示第3段
0
2
6
11
13
99
89
170
68

[root@awulinux ~]# awk -F ':' '$1~/r*o/ {print $1,$3}; $1~/user/ {print $1,$3}' 2.txt
root 0
daemon 2
shutdown 6
operator 11
gopher 13
nobody 99
postfix 89
avahi-autoipd 170
haldaemon 68
user3 506

[root@awulinux ~]# awk -F ':' '$1~/r*o/ {print $1,$3}; $1~/nobody/ {print $1,$3}' 2.txt
root 0
daemon 2
shutdown 6
operator 11
gopher 13
nobody 99
nobody 99
postfix 89
avahi-autoipd 170
haldaemon 68
[root@awulinux ~]# awk -F ':' '$1~/r*o|nobody/ {print $1,$3}' 2.txt
root 0
daemon 2
shutdown 6
operator 11
gopher 13
nobody 99
postfix 89
avahi-autoipd 170
haldaemon 68

[root@awulinux ~]# awk -F ':' '$1=="nobody" {print $1}' 2.txt     
nobody
[root@awulinux ~]# awk -F ':' '$1=="nobody"' 2.txt    第一段为nobody
nobody:x:99:99:Nobody:/:/sbin/nologin
[root@awulinux ~]# awk -F ':' '$1=="nobody" || $7~/nolog/' 2.txt      第一段为nobody或者第七段是nolog

[root@awulinux ~]# awk -F ':' '$1>=500' 2.txt   第一段大于等于500
说明:当比较数字时,不能加双引号,如果写成$1>="500"就不符合需求了

[root@awulinux ~]# awk -F ':' '$7!="/sbin/nologin"' 2.txt    第七段不是/sbin/nologin,!=不是不等于
[root@awulinux ~]# awk -F ':' '$7!~/nolog/' 2.txt            第七段不匹配nolog,意思与上面一致

[root@awulinux ~]# awk -F ':' '$3<$4' 2.txt         第三段小于第四段的行

[root@awulinux ~]# awk -F ':' '$3==$4' 2.txt        第三段等于第四段的行
[root@awulinux ~]# awk -F ':' 'OFS=":"; $3=$4' 2.txt

[root@awulinux ~]# awk -F ':' 'OFS=":"; {if ($3>100) $7=$3+$4}' 2.txt

[root@awulinux ~]# awk -F ':' 'NR<10' 2.txt           打印前九行

[root@awulinux ~]# awk -F ':' 'NR>10' 2.txt         打印10行以后的行

[root@awulinux ~]# awk -F ':' 'NR==10' 2.txt           打印第10行
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
[root@awulinux ~]# awk -F ':' 'NR==10 {print $1,$5}' 2.txt    打印第10行,第1段和第5段
uucp uucp
[root@awulinux ~]# awk -F ':' 'NR==10 {print $1,$7}' 2.txt     打印第10行,第1段和第7段
uucp /sbin/nologin
[root@awulinux ~]# awk -F ':' '{if(NR==10) print $1,$7}' 2.txt        打印第10行,第1段和第7段
uucp /sbin/nologin
[root@awulinux ~]# awk -F ':' 'OFS=":" {if(NR==10) print $1,$7}' 2.txt   打印第10行,第1段和第7段
uucp:/sbin/nologin

[root@awulinux ~]# awk -F ':' '{print NF}' 2.txt

[root@awulinux ~]# awk -F ':' '{if (NF==7) print $1}' 2.txt

[root@awulinux ~]# awk -F ':' '{print $NR,$NF}' 2.txt

[root@awulinux ~]# awk -F ':' '$7=$3+$4' 2.txt          数学计算,把第三段和第四段相加,并赋予第七段
bin x 1 1 bin /bin 2
daemon x 2 2 daemon /sbin 4
adm x 3 4 adm /var/adm 7
lp x 4 7 lp /var/spool/lpd 11
sync x 5 0 sync /sbin 5
shutdown x 6 0 shutdown /sbin 6
...........

[root@awulinux ~]# awk -F ':' 'OFS=":"; $7=$3+$4' 2.txt     
[root@awulinux ~]# awk -F ':' 'OFS=":" {$7=$3+$4; print $0}' 2.txt
root:x:0:0:root:/root:0
bin:x:1:1:bin:/bin:2
daemon:x:2:2:daemon:/sbin:4
adm:x:3:4:adm:/var/adm:7
lp:x:4:7:lp:/var/spool/lpd:11
sync:x:5:0:sync:/sbin:5
shutdown:x:6:0:shutdown:/sbin:6
halt:x:7:0:halt:/sbin:7
mail:x:8:12:mail:/var/spool/mail:20
......
[root@awulinux ~]# awk -F ':' 'OFS=":" {$7=$3+$4; print $1,$3}' 2.txt
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6

[root@awulinux ~]# awk -F ':' '{(sum=sum+$3)}; END {print sum}' 2.txt       计算第三段的总和
4296
2016-06-16 23:32 举报
已邀请:
0

greenfish

赞同来自:

谢谢分享

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: