Linux命令之awk

JouyPub

awk中使用shell命令
awk '{cmd="rm "$0;system(cmd)}' filename.txt

awk 中输出双引号和单引号

awk '{print "\""}'
awk '{print "'\''"}'

统计每行字符分割后特定字符出现的次数
awk -F "," '{if($(NF-1)=="2"){print $0}}' | wc -l

统计次数

awk -F "," ' BEGIN { count1=0;count2=0;count3=0} { if((NF-1)==1){count1+=1} else if((NF-1)==2){count2+=1} else{count3+=1} } END {print NR,count1,count2,count3} ' 20151120.txt

awk中取对应的列:取整行$0,取第一列$1,取最后一列$NF,取倒数第二列$(NF-1)



使用awk处理文件中上下关联的两行,例如文件foo.txt有如下内容
abc
portals: 192.168.5.41:3260
def
portals: 192.168.5.43:3260

如何把文件foo.txt内容变为如下内容

abc 192.168.5.41:3260
def 192.168.5.43:3260

方法: awk '/port/{print a" "$2}{a=$1}' foo.txt

解释:

处理第一行的时候,以port开头吗?很明显,不以port开头,所以那个pattern不匹配,action不执行。但执行了后面的a=$1
处理第二行的时候,以port开头,打印出来a和本行$2,再处理就是个循环过程。

由于第一行没有匹配以port开头的,所以print a" "$2不执行,执行a=$1, a=abc
由于第二行有匹配以port开头的,所以print a" "$2行执行,由于a=abc,所以输出 abc 192.168.5.41:3260
由于第三行没有匹配以port开头的,所以print a" "$2不执行,执行a=$1,a=def
由于第四行有匹配以port开头的,所以print a" "$2行执行,由于a=def,所以输出 def 192.168.5.43:3260

由此得到结果:

abc 192.168.5.41:3260
def 192.168.5.43:3260



欢迎订阅「K叔区块链」 - 专注于区块链技术学习

博客地址:http://www.jouypub.com
简书主页:https://www.jianshu.com/u/756c9c8ae984
segmentfault主页:https://segmentfault.com/blog/jouypub
腾讯云主页:https://cloud.tencent.com/developer/column/72548
阅读 1.3k

jouypub.com
聊聊区块链,大数据,后端开发,前端开发

聊聊区块链、大数据、应用开发

522 声望
159 粉丝
0 条评论

聊聊区块链、大数据、应用开发

522 声望
159 粉丝
宣传栏