按范围过滤grep结果并在列中显示

时间:2015-04-02 13:42:36

标签: awk sed grep uniq

我从我的日志统计信息,数据和值中提取了grep的数据:

Apr-1 -4
Apr-1 -2
Apr-1 -5
Apr-1 5
Apr-1 95
Apr-2 -4
Apr-2 -6
Apr-2 -8
Apr-2 9

我需要range: <=4>4 to <8>= 8显示计数,然后按列显示分组。像这样:

Day      <=4     >4 & <8    >= 8
--------------------------------
Apr-1     3         1         1
Apr-2     3         0         1

我用awk uniq进行了一些测试和研究......但我没有得到任何结果

谢谢!

1 个答案:

答案 0 :(得分:0)

awk '
    {days[$1] = 1}
    $2 <= 4 {a[$1]++} 
    4 < $2 && $2 < 8 {b[$1]++} 
    $2 >= 8 {c[$1]++} 
    END {
        OFS="\t"; 
        print "Day","<=4", "4<x<8", ">=8"; 
        PROCINFO["sorted_in"] = "@ind_str_asc"; 
        for (day in days) 
            print day, a[day]+0, b[day]+0, c[day]+0
    }
' <<END | column -t 
Apr-1 -4
Apr-1 -2
Apr-1 -5
Apr-1 5
Apr-1 95
Apr-2 -4
Apr-2 -6
Apr-2 -8
Apr-2 9
END
Day    <=4  4<x<8  >=8
Apr-1  3    1      1
Apr-2  3    0      1

在打印时向值添加零的原因是空值(例如Apr-2 4&lt; x&lt; 8)将显示为空字符串。当通过添加零强制进入数字上下文时,它们显示为0。