我想使用bash计算特定列的总和而不使用特定列的打印(我想保留管道的所有输出列,只将其中一个加起来!)
答案 0 :(得分:10)
如果您想要总结第二列,但打印某个管道中的所有列:
cat data | awk '{sum+=$2 ; print $0} END{print "sum=",sum}'
如果文件数据如下:
1 2 3
4 5 6
7 8 9
然后输出为:
1 2 3
4 5 6
7 8 9
sum= 15
答案 1 :(得分:1)
您想要一步一步地连续总结一列吗?
是否必须bash
或者您可以使用awk
:
# file 'fields.txt':
1 foo
2 bar
10 baz
8 boz
# Step by step sum the first column:
awk '{s+=$1; print s, $2}' < fields.txt
# Output:
1 foo
3 bar
13 baz
21 boz
答案 2 :(得分:0)
假设输入数据与@ John1024相同,您可以使用好的cut
和paste
以及一些bash算术:
$ cat data | echo $(( $( cut -d' ' -f2 | paste -s -d+ - ) ))
15
$
这里的技巧是告诉paste
插入+
作为分隔符,然后在结果表达式上使用$(( ))
执行bash算术。
注意我只是cat
输入数据用于说明目的 - 它可以从另一个源传输,或者数据文件也直接传递给cut
。
答案 3 :(得分:0)
awk '{sum+=$1;} END { print "Total of 1st Column:" sum }1' abc.t6RrMm
给出如下文件:
12 12 12
1 1 1
2 2 1
0 1 2
第一列的总数为15
。