使用awk计算具有不同条件的行

时间:2015-06-22 08:38:18

标签: bash awk merge count wc

我需要获得1个文本文件的2个不同条件的行数。 第一个条件是第三列的值小于10,所以我可以通过以下脚本来完成:

awk '$3<=10' DATA_File | wc -l

第二个条件是获取同一个文件中的总行数,我可以得到:

awk 'END { print FNR}' DATA_File

awk '$3' DATA_File | wc -l

然而,我不知道的是如何将这些命令合并到单个字符串中,这样我就可以将结果保存在一个单独的文件中,其中一个字符串由“tab”或“space”分隔,由“number”组成字符串的数量为&lt; 10“,”字符串总数“,”它们的比率/或百分比“

例如文件是:

wer fre 11
grt o34 5
45f 123 45

我需要的输出是:

2 3 0.66/ or 66%

我可以在python上编写一个小脚本,但是由于多种原因bash会更方便。

1 个答案:

答案 0 :(得分:3)

例如,您可以说:

$ awk '$3<=10 {min10++} END {print min10, FNR, (FNR?min10/FNR:0)}' file
1 3 0.333333

print并输出到print ... > "new_file"等文件。

您还可以使用printf提供更好的格式:

$ awk '$3<=10 {min10++} END {printf "%d %d %.2f%\n", min10, FNR, (FNR?min10/FNR:0)}' file
1 3 0.33%

(FNR?min10/FNR:0)技巧由Ed Morton提供,用于防止潜水为零。