linux - 如何在 Linux 中计算大于某个值的行并将计数写入文本文件

标签 linux awk

我有一个包含示例数据的文件,如下所示:

%_above_10 %_above_20 %_above_30 %_above_50
88.6    88.1    87.8    87.2
89.1    78.5    72.3    59.4
100.0   100.0   100.0   100.0
100.0   100.0   100.0   100.0
100.0   100.0   70.0   80.0
100.0   100.0   100.0   80.0
100.0    31.9    26.8    17.4
00.0   96.0    77.3    43.3
68.8    65.9    63.6    57.1

我需要计算每列中值为 100 的行并将其写入文本文件。输出可能如下所示:

Totalrows %_above_10 %_above_20 %_above_30 %_above_50
   9        5            4          3         2

我可以使用基本的 awk 命令一次计算一列:

awk -F "\t" '{if($1 == 100)print;}

任何人都可以建议一种方法,以上述指定的方式对列进行计数,并使用 Linux 命令或脚本(awk)写入文件。谢谢

最佳答案

使用 awk 和 column 的方法。

awk 'NR==1{print "TotalRows "$0;next}
     {for(i=1;i<=NF;i++)a[i]+=$i==100}
     END{print NR-1,a[1],a[2],a[3],a[4]}' file | column -t

更一般

 awk 'NR==1{print "TotalRows "$0;next} 
      {a[0]++;for(i=1;i<=NF;i++)a[i]+=$i==100}
      END{for(i=0;i<=NF;i++)printf "%s ",a[i];print t}' test | column -t
<小时/>

输出

TotalRows  %_above_10  %_above_20  %_above_30  %_above_50
9          5           4           3           2

关于linux - 如何在 Linux 中计算大于某个值的行并将计数写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28966124/

相关文章:

linux - 如何在 PulseAudio 中获取播放进程列表

awk - 在文件名中与模式匹配的特定位置插入文本

linux - 如何在 Power 上运行适用于 Linux 的安全连接器

c++ - 使用 Linux 伪终端测试 QSerialPort

android - 使用调试构建作为调试符号源

regex - 如何对未知(但重复)的词进行分组以创建索引?

scripting - 使用 sed,在模式上方或下方插入一行?

php - 旧动态 url 的 mod_rewrite 向后

regex - AWK:模式匹配具有可变行号的多行数据

regex - 删除文件中的匹配对