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

awk

时间:2014-09-05 03:26:51      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:false   style   

  1. 在文件某一行上添加一列

#awk实现
awk -v a="add_chars" ‘{print $0} /REGE/{print $0,a}‘ file.txt
解释:-v:引入一个变量a,/REGE/:使用正则匹配一行
#sed实现
sed ‘/REGE/{s/.&/& add_chars/g}‘ file.txt
解释:/REGE/:匹配到正则REGE后进行替换动作


  2.不同的行不同处理

shell> awk -v a="aaa" -v b="bbb" ‘NR<=4{if($6 ~ /TIME|ESTABLISHED/) print NR,$0,a;else if($6 ~ /LISTEN/) print NR,$0,b;else print NR,a,b } NR>4{print NR,$0,a,b}‘ netstat.txt
1 aaa bbb
2 aaa bbb
3 tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      961/sshd             bbb
4 tcp        0      0 0.0.0.0:9080                0.0.0.0:*                   LISTEN      22296/nginx.conf     bbb
5 tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1182/master          aaa bbb
6 tcp        0      0 0.0.0.0:9180                0.0.0.0:*                   LISTEN      15297/httpd          aaa bbb
7 tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      23316/xinetd         aaa bbb
8 tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      13571/snmpd          aaa bbb
9 tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2131/mysqld          aaa bbb
10 tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      22296/nginx.conf     aaa bbb
11 tcp        0      0 127.0.0.1:1446              127.0.0.1:80                TIME_WAIT   -                    aaa bbb
12 tcp        0      0 127.0.0.1:3306              127.0.0.1:60675             TIME_WAIT   -                    aaa bbb
13 tcp        0      0 127.0.0.1:3306              127.0.0.1:60663             TIME_WAIT   -                    aaa bbb
14 tcp        0      0 127.0.0.1:3306              127.0.0.1:60668             TIME_WAIT   -                    aaa bbb

解释:分两种情况:NR<=4{...}和 NR>4{...},分别进行不同的动作

{...}内的动作,如果需要多个命令辅助时,可以使用分号;隔开


3.多个条件匹配

awk ‘/nologin/ && NR<20 {if(NR<=2) print $1;else if(NR>2 && NR<10) print $2;else print $0}‘ passwd
#区别:
awk ‘/nologin/ && NR<20; {if(NR<=2) print $1;else if(NR>2 && NR<10) print $2;else print $0}‘ passwd
#NR<20后面有分号,分号前后两个部分会分别执行,即重复输出

解释:

条件:/nologin/ && NR<+20 

---条件中首先过滤出符合这两个条件的行

动作:if(NR<=2) print $1;else if(NR>2 && NR<10) print $2;else print $0

--在动作中对这些符合的行进一步处理


awk

标签:false   style   

原文地址:http://3974020.blog.51cto.com/3964020/1548876

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