开发者社区 问答 正文

linux:怎样从复杂的log中提取信息

例如在文件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每次都是输出整行,没法提取一个关键词的信息。

展开
收起
a123456678 2016-06-16 15:14:24 1868 分享 版权
1 条回答
写回答
取消 提交回答
  • 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的好处在于可以对输入/输出的格式作比较精细的处理。

    2019-07-17 19:40:58
    赞同 展开评论