2017-10-05 58 views
0

我试图让包含数字的制表符分隔的columsums(第一个exent)。Bash Colum总结一个可变长度的表格

要找出列的数量是我使用存储在一个变量:

cols=$(awk '{print NF}' file.txt | sort -nu | tail -n 1

接下来我要计算所有数字的总和在该列并重新保存这一个变量一个循环:

for c in 2:$col 
do 
    num=$(cat file.txt | awk '{sum+$2 ; print $0} END{print sum}'| tail -n 1 
done 

num=$(cat file.txt | awk '{sum+$($c) ; print $0} END{print sum}'| tail -n 1 上本身就带有固定的数量,进而不变量输入作品找到,但我不能让它接受的,闭环v良莠不齐。

感谢您的支持

p.s.如果我能够在没有环路问题的情况下一次总结所有列(第一个列),那也没关系。

回答

1

假设你要在各个列的总和,

$ cat file 
1 2 3 4 
5 6 7 8 
9 10 11 12 

$ awk ' 
    {for (i=2; i<=NF; i++) sum[i] += $i} 
    END {for (i=2; i<=NF; i++) printf "%d%s", sum[i], OFS; print ""} 
' file 
18 21 24 
+0

非常感谢。奇迹般有效。 –

1

如果你不绑定到awk,还有对文本文件“命令行statistical operations”之称GNU datamash一个很好的工具。

随着datamash,求和(可能所有的最简单的动作)的第2列是一样容易:

$ datamash sum 2 < table 
9 

假设table文件保存等制表符分隔的数据:

$ cat table 
1 2 3 4 
2 3 4 5 
3 4 5 6 

要总计从2n的所有列使用column ranges(在datamash 1.2中可用):

$ n=4 
$ datamash sum 2-$n < table 
9 12 15 

要包含标题,请参阅--headers-out选项