如何总结一栏

时间:2018-08-02 16:00:29

标签: bash shell sum sh

我有一个看起来像这样的文件:

A  B  C  128 D
Z  F  R  18  -
M  W  A  1   -
T  B  D  21  P
Z  F  R  11  -
L  W  A  10  D

我正在寻找一种汇总第4列的方法(第5列的行看起来像D)在此示例中为:128 + 10 = 138。

我设法用以下命令总结了第四列:

cat file.txt  |awk '{total+= $4} END {print total}'

2 个答案:

答案 0 :(得分:3)

您只是省略了选择动作要应用于哪行的模式。

awk '$5 == "D" {total += $4} END {print total}' file.txt

awk中,将模式应用于输入的每一行,如果模式匹配,则将应用操作。如果没有模式(如您的尝试),则将无条件处理该行。

答案 1 :(得分:1)

具有datamashsort的解决方案:

cat file.txt | sort -k5 | datamash -W -g5 sum 4 
  • sort -k5用于根据5列进行排序。
  • datamash使用-W来指定空格是分隔符,-g5使用5th列进行分组,最后使用sum 4来获得{{ 1}}列。

它给出以下输出:

4th