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
有如下内容 abcportals: 192.168.5.41:3260defportals: 192.168.5.43:3260
如何把文件foo.txt内容变为如下内容
abc 192.168.5.41:3260def 192.168.5.43:3260
方法: awk '/port/{print a" "$2}{a=$1}' foo.txt
解释:
处理第一行的时候,以port开头吗?很明显,不以port开头,所以那个pattern不匹配,action不执行。但执行了后面的a=$1
处理第二行的时候,以port开头,打印出来a和本行$2,再处理就是个循环过程。由于第一行没有匹配以port开头的,所以
由于第二行有匹配以port开头的,所以print a" "$2
不执行,执行a=$1
, a=abcprint 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:3260def 192.168.5.43:3260
欢迎订阅「K叔区块链」 - 专注于区块链技术学习 博客地址: 简书主页: segmentfault主页: 腾讯云主页: