【发布时间】:2016-06-14 19:29:13
【问题描述】:
我想使用 bash 计算特定列的总和,而不使用打印该特定列(我想保留管道的所有输出列并且只对其中一个列求和!)
【问题讨论】:
-
显示示例,几行输入和所需的输出。
我想使用 bash 计算特定列的总和,而不使用打印该特定列(我想保留管道的所有输出列并且只对其中一个列求和!)
【问题讨论】:
如果您想对第二列求和,但要打印某个管道中的所有列:
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
【讨论】:
您想逐步对一列进行连续求和吗?
必须是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
【讨论】:
假设输入数据与@John1024 相同,您可以使用良好的cut 和paste 以及一些bash 算术:
$ cat data | echo $(( $( cut -d' ' -f2 | paste -s -d+ - ) ))
15
$
这里的技巧是告诉paste 插入+ 作为分隔符,然后对结果表达式使用$(( )) 执行bash 算术。
请注意,我只是 cating 输入数据用于说明目的 - 它可以从另一个来源通过管道传输,或者也可以将数据文件直接传递给 cut。
【讨论】:
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。
【讨论】: