在文件某一行上添加一列
#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
--在动作中对这些符合的行进一步处理
原文地址:http://3974020.blog.51cto.com/3964020/1548876