这是我需要的一个例子:
INPUT:
a 5
a 7
a 11
b 10
b 11
b 12
.
.
.
输出:
a 2
b 0
因此输出应该低于我的阈值(在这种情况下,它是2美元<10)。
我的代码是:
awk 'OFS="\t" {v[$1]+=$2; n[$1]++} END {for (l in n) {print l, n[l]} }' input
我的输出是
a 3
b 3
我不确定在何处放置条件$2 < 10
。
答案 0 :(得分:2)
您可以使用$2 < value
检查阈值条件,其中value
是awk
给出的-v value=XX
变量。
此外,您正在使用v[$1]+=$2
:此总和,不计算匹配的案例。
总之,我会用这个:
awk -v t=10 '{list[$1]} $2<t {count[$1]++} END {for (i in list) print i, count[i]+0}' file
注意我们需要使用两个数组:一个用于跟踪计数器,另一个用于跟踪所有可能的值。
-v t=10
提供门槛。{list[$1]}
跟踪出现的所有可能的第一个字段。$2<t {count[$1]++}
如果第二个字段小于阈值,则递增计数器。END {for (i in list) print i, count[i]+0}
最后,遍历所有第一个字段并打印它们的值低于阈值的次数。如果未设置该值,count[i]+0
技巧会使其打印0
。$ awk -v t=10 '{list[$1]} $2<t {count[$1]++} END {for (i in list) print i, count[i]+0}' a
a 2
b 0