如何使用awk统计列中特定条件的数据数量?

问题描述 投票:0回答:2

我有以下格式的数据文件

AA 21.1218 14.7862 0.0566269
BB 26.5036 14.5513 19.975
CC 7.82448 1.30605 50.126899
AA 10.0179 4.3786 21.232036
BB 4.80236 4.23255 36.217038
CC 31.475 9.60365 7.237505
AA 8.39392 5.89571 10.30242
......

在这里,我想做的是

检查第1列和第4列,统计第4列中数字大于12的数据的数量,以及第一列中“BB”的数据的数量(在上面的例子中,它应该是2),然后乘以20到该数字。 (最终答案应该是40)

我从

开始
awk '{print ($4>12)}' file > file2
wc -l file2

查看第4列的编号,并打印行号。

但显然它们没有起作用。看来 awk 不能在内部使用 < or > 运算符。 (大于或小于)如何使用 cat、awk、sed 或 grep 实现此操作?

谢谢

bash awk sed
2个回答
3
投票

打印匹配行:

awk '$1 == "BB" && $4 > 12' file

(执行隐式操作

{print}

您还可以进行计数和乘法:

awk 'BEGIN {count = 0} $1 == "BB" && $4 > 12 {count++} END {print(count * 20)}' file

0
投票

相同的方法,无需额外的计数器变量:

awk '{ +$4 <= 12 || FNR -= $1 == "BB" } END { print 20 * (NR - FNR) } '
© www.soinside.com 2019 - 2024. All rights reserved.