添加由空格分隔的 A 列和 B 列的值列表并显示求和结果

添加由空格分隔的 A 列和 B 列的值列表并显示求和结果

我有一个名为fold.txt.每行都有两个值,并用空格分隔。如果我说第一个值代表 A 列,空格后的第二个值代表 B 列,那么如何将 A 列的所有值和 B 列的所有值相加,并分别显示每列的总和?

我期待这样的事情:

$ cat fold.txt
100 500
200 300
700 100

输出:

Total count Column A = 1000
Total count column B = 900

答案1

awk

awk '{ sum_A +=$1; sum_B+=$2; };
END{ print "Total count Column A = " sum_A +0;
     print "Total count column B = " sum_B +0;
}' infile

语言是用于文本处理目的的工具,$1表示第一列的值,$2表示第二列的值,$3第三列等,一个特殊的一个NF是表示最后一列的 ID,相应地也是最后一列的值(因此您可以将上面$NF替换为也是;是的,当是最后一列 Id 时,您会捕获它,因此变量的值告诉您有多少列(每行 awk 的值更新是从输入中读取的)。$2$NFNF

为了处理输入文件为空但仍获得数字输出的边缘情况,我们在结果中添加 0 强制awk输出数字结果。

列(或字段)awkFS变量(F伊尔德Separator),默认使用空格/制表符。如果您希望按不同字符拆分列,可以使用以下-F选项重新定义它:awk

awk -F'<character-here>' '...' infile

或在BEGIN{...}块内,如FS

awk 'BEGIN{ FS="<character-here>"; }; { ... }' infile

例如,对于如下所示的输入文件(现在是逗号而不是空格):

100,500
200,300
700,100

你可以编写你的awk代码如下:

awk -F',' '{ sum_A +=$1; sum_B+=$2; };
END{ print "Total count Column A = " sum_A +0;
     print "Total count column B = " sum_B +0;
}' infile

或者在BEGIN块内:

awk 'BEGIN{ FS=","; }; { sum_A +=$1; sum_B+=$2; };
END{ print "Total count Column A = " sum_A +0;
     print "Total count column B = " sum_B +0;
}' infile

有点复杂,总结一下以下示例中输入文件的列:

100,500,140,400
200,300,640,200
700,100,400,130

所以我们在第一段中讨论了NF(NF 值告诉你有多少列(每行更新)):

awk -F',' '{ for (i=1; i<=NF; i++) sum[i]+=$i; };
END{ for (colId in sum) { 
         printf ("Total count Column: %d= %d\n", colId, sum[colId] );
     };
}' infile

这里唯一的新东西是我们使用awk数组来寻址同一列 Id,从 的值中获取i并将它们的值添加$i到该数组中(该数组的索引/键是列 Id);然后在该END{...}块中,我们在看到的键上循环遍历数组,然后首先打印列 Id,然后打印旁边的列的总和,您将看到如下输出:

Total count Column: 1= 1000
Total count Column: 2= 900
Total count Column: 3= 1180
Total count Column: 4= 730

答案2

这对dc来说是一份好工作。

dc 首先读取fold.txt 中的数据,然后读取sum_col_dc 中的代码。

像这样使用它:dc Fold.txt sum_col_dc

cat sum_col_dc  

[lB+sBlA+sAz0<C]sC[lGLElDnnnp]sH[Total count Column ]sD[B]sE[A]SE[ = ]sGlCxlAlHxlBlHx  

更多细节:

[lB+sBlA+sAz0<C]sC  
[lGLElDnnnp]sH  
[Total count Column ]sD  
[B]sE  
[A]SE  
[ = ]sG  
lCx  
lA  
lHx  
lB  
lHx  

享受dc
更多按需解释。

相关内容