例如在文件1.log中
id=1
a=1,b=2,c=3,d=4,e=5....,z=100
id=2
a=3,b=4,d=20,e=6,f=7,...,z=30
id=3
a=4,b=4,c=2,d=5,e=8,...,z=29
....
现在我想统计在log中d的分布~
有什么好方法吗? grep每次都是输出整行,没法提取一个关键词的信息。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
awk的解法:
#!/bin/bash
awk -F"," '
NF == 0 {next} # skip blank line
NF == 1 {printf "%s ", $1} # for id line
# for data line
{
for (i = 1; i <= NF; i++) {
split($i, a, "=");
if (a[1] == "d") print $i;
}
}
' 1.log
结果如下:
id=1 d=4
id=2 d=20
id=3 d=5
awk的好处在于可以对输入/输出的格式作比较精细的处理。