按范围过滤 grep 结果并显示在列中
Fillter grep results by range and display in column
我已经使用 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
做了一些测试和研究......但我没有得到结果
谢谢!
awk '
{days[] = 1}
<= 4 {a[]++}
4 < && < 8 {b[]++}
>= 8 {c[]++}
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
我已经使用 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
做了一些测试和研究......但我没有得到结果
谢谢!
awk '
{days[] = 1}
<= 4 {a[]++}
4 < && < 8 {b[]++}
>= 8 {c[]++}
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