码迷,mamicode.com
首页 > 其他好文 > 详细

awk命令

时间:2017-01-12 16:08:24      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:awk命令

awk  功能更强大,可以分段,针对段进行操作

注:特殊符号不需要转义,但不支持{}

    -F   分隔符

    OFS 打印出分隔符


打印第3,4段

[root@wy ~]# awk -F ‘:‘ ‘{print $3,$4}‘ /etc/passwd

0 0

1 1

2 2


打印分隔符

[root@wy ~]# awk -F ‘:‘ ‘OFS="#" {print $3,$4}‘ /etc/passwd

0#0

1#1

2#2


匹配字符

[root@wy ~]# awk ‘/root/‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin


特殊符号不需要转义

[root@wy ~]# awk ‘/root|wyy/‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

wyy:x:500:500::/home/wyy:/bin/bash

wyy2:x:501:502::/home/wyy2:/bin/bash

[root@wy ~]# awk ‘/r+o/‘ /etc/passwd

[root@wy ~]# awk ‘/r?o/‘ /etc/passwd

[root@wy ~]# awk ‘/r*o/‘ /etc/passwd


匹配第一段

[root@wy ~]# awk -F ‘:‘ ‘$1~/r*o/‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin


匹配第一段,打印第3段

[root@wy ~]# awk -F ‘:‘ ‘$1~/r*o/  {print $3}‘ /etc/passwd

0

2

6


多次匹配(;分隔)

[root@wy ~]# awk -F ‘:‘ ‘$1~/r*o/ {print $1,$3}; $1~/wyy/ {print $1,$3}‘ /etc/passwd

root 0

daemon 2

shutdown 6

operator 11

gopher 13

nobody 99

postfix 89

haldaemon 68

nfsnobody 65534

wyy 500

wyy2 501

解释说明 :

若匹配的两个在同一行中,则结果会显示两次。(因为有两个过滤器,都要走一遍。)


条件操作符


匹配$1等于root的

[root@wy ~]# awk -F ‘:‘ ‘$1=="root"‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash


匹配$1等于root的或者$7匹配nologin的

[root@wy ~]# awk -F ‘:‘ ‘$1=="root" || $7~/nologin/‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin


匹配$3>=500的

[root@wy ~]# awk -F ‘:‘ ‘$3>=500‘ /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

wyy:x:500:500::/home/wyy:/bin/bash

wyy2:x:501:502::/home/wyy2:/bin/bash

user2:x:506:501::/home/user2:/bin/bash

若500加上双引号,则是扫完ASC码比较的


匹配不等于的

[root@wy ~]# awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync


不匹配的指定的

[root@wy ~]# awk -F ‘:‘ ‘$7!~/nologin/‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync


两个段的比较大小

[root@wy ~]# awk -F ‘:‘ ‘$3<$4‘ /etc/passwd

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


一个复杂的格式

awk -F ‘:‘ ‘BEGIN{OFS=“:”} {if(条件){语句1;语句2;语句3}} END{语句}‘


内置变量

    NR 表示行

    NF  表示一行的段数

    OFS  显示指定分隔符


打印第10行

[root@wy ~]# awk -F ‘:‘ ‘NR==10‘ /etc/passwd

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin


打印第10行指定的段

[root@wy ~]# awk -F ‘:‘ ‘NR==10 {print $1,$7}‘ /etc/passwd

uucp /sbin/nologin


if条件的

[root@wy ~]# awk -F ‘:‘ ‘OFS=":" {if (NR==10) print $1,$7}‘ /etc/passwd

uucp:/sbin/nologin


[root@wy ~]# awk -F ‘:‘ ‘{print NF}‘ /etc/passwd

7

7

[root@wy ~]# awk -F ‘:‘ ‘{if (NF==7) print $1}‘ /etc/passwd

root

bin


[root@wy ~]# awk -F ‘:‘ ‘{print $NR,$NF}‘ /etc/passwd

root /bin/bash

x /sbin/nologin

2 /sbin/nologin

4 /sbin/nologin

lp /sbin/nologin

/sbin /bin/sync

/sbin/shutdown /sbin/shutdown

/sbin/halt

/sbin/nologin

解释说明:

可以看到第8行呢,就跟上面显示的不一样了。

  NR==1,$NF是第一行第一段,$NF是第一行最后一段 

  NR==2,$NF是第二行第二段,$NF是第二行最后一段 

  以此类推……



[root@wy ~]# awk -F ‘:‘ ‘OFS=":" {$7=$3+$4; print $0}‘ /etc/passwd         ### $0表示一行

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


求和

[root@wy ~]# awk -F ‘:‘ ‘{(sum=sum+$3)};END {print sum}‘ /etc/passwd

68460


本文出自 “linux” 博客,转载请与作者联系!

awk命令

标签:awk命令

原文地址:http://warm51fun.blog.51cto.com/3884274/1891422

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!