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

count lines with different conditions using awk

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

awk '<=10' DATA_File | wc -l

第二个条件是获取同一文件中的总行数,我可以通过以下方式获取:

awk 'END { print FNR}' DATA_File

awk '' DATA_File | wc -l

但是,我不知道如何将这些合并到单个字符串中的命令,这样我就可以将结果保存在一个单独的文件中,其中一个字符串由 "tab" 或 [=30 分隔=]由"number of string with <10"、"total number of strings"、"their ratio/ or percentage"

组成

例如文件是:

wer fre 11
grt o34 5
45f 123 45

我需要的输出是:

2 3 0.66/ or 66%

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

例如你可以说:

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

print 并输出到 print ... > "new_file".

这样的文件

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

$ awk '<=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 提供,用于防止跳零。