例如在文件1.log中id=1a=1,b=2,c=3,d=4,e=5....,z=100id=2a=3,b=4,d=20,e=6,f=7,...,z=30id=3a=4,b=4,c=2,d=5,e=8,...,z=29....现在我想统计在log中d的分布~有什么好方法吗?grep每次都是输出整行,没法提取一个关键词的信息。
2 回答
湖上湖
TA贡献2003条经验 获得超2个赞
awk的解法:#!/bin/bashawk-F","'NF==0{next}#skipblanklineNF==1{printf"%s",$1}#foridline#fordataline{for(i=1;i<=NF;i++){split($i,a,"=");if(a[1]=="d")print$i;}}'1.log结果如下:id=1d=4id=2d=20id=3d=5awk的好处在于可以对输入/输出的格式作比较精细的处理。
元芳怎么了
TA贡献1798条经验 获得超7个赞
先去掉id=中的d=,然后grep-o参数提取匹配的模式。再把数字再抓出来,awk或者cut就可以了。grep-v"id=[0-9]*"1.log|grep-o"d=[0-9]*"|awk-F'=''{print$2}'或者,用egrep,grep-v"id=[0-9]*"1.log|egrep-o"d=[0-9]+"|cut-d'='-f2方法还是多啦,其他sed那些都可以用;
添加回答
举报
0/150
提交
取消