如何为 n 列而不是 3 列编写 awk '{print $1+$2+$3} file1 > file2 ?

如何为 n 列而不是 3 列编写 awk '{print $1+$2+$3} file1 > file2 ?
awk '{ for (i = 1; i <= NF; i++) sum[i]+=$i} END{for (i in sum) print sum[i]}' file1 > file2

这有助于按记录求和,但类似的方案无助于按列求和(也许)。如何将按列加法推广到 n 列?

cat file1
23 46 45
45 57 58
56 78 74

cat file2
114
160
208

答案1

您想要计算每条记录的字段总和,因此只需:

awk '{sum = 0; for (i = 1; i <= NF; i++) sum += $i; print sum}' < file1 > file2

大括号开始行动在输入的每一行上执行的语句;没有前面的状况这将限制其执行到满足这样的行状况

每行:

  1. 将变量初始化sum为零。
  2. 循环遍历字段,从字段 #1 开始,到最后一个字段(特殊变量 )结束,并按该字段的值 ( )NF递增。sum$i
  3. 打印变量的值sum

答案2

这会比 awk 慢一点,但是非常简洁:

perl -MList::Util=sum0 -lane 'print sum0(@F)' file1

它使用sum0核心 List::Util 模块的功能。

相关内容