如何使用awk获取数据帧的所有值的总和



假设我有一个数据帧,如:

A,B,C,D
2,1,1,1
2,3,1,4

我想得到数据帧的总和,这意味着只有一个总值作为输出。因此,对于给定的示例,输出应该是15

我试过了,但它给出了每列的总和:

awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1; i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' file

请您尝试以下操作。

awk 'BEGIN{FS=","} FNR>1{for(i=1;i<=NF;i++){sum+=$i}} END{print sum}'  Input_file

OP的方法不起作用:OP的逻辑是正确的,但我们不想在这里使用数组,我们需要一个简单的变量,其中包含所有和,然后在END代码块中,我们需要打印它。

另一种方法:-(

awk -F',' 'NR>1{s=s FS$0}END{gsub(FS,"+",s);print "0"s}' file|bc

得到15

GNU awk的另一种方法。这会将文件转换为一列,并对其进行汇总。

awk '{s+=$0} END{print s}' RS='[,n]' file

输出:

15

参见:8个强大的Awk内置变量–FS、OFS、RS、ORS、NR、NF、FILENAME、FNR

最新更新