如何在某列中添加所有值?

时间:2016-05-04 09:00:45

标签: shell awk grep

我想添加每行的所有第3个字段并生成结果。

以下是解决问题的方法

sum=0
grep '2016Feb' input.txt|awk -F\- '{print $3}'|while read LINE; do
sum = $(expr $sum + $LINE)
done
echo $sum

有没有比我的代码更好的解决问题的方法?可能是一个解决问题@命令行本身的命令?

对于像

这样的文件
$ cat input.txt
Feb2016-2016-110
Feb2016-2016-20
Feb2016-2016-220
Feb2016-2016-140
Feb2016-2016-100

输出为:590

2 个答案:

答案 0 :(得分:2)

只需将字段分隔符设置为短划线并将第三列相加:

$ awk -F- '{sum+=$3} END{print sum+0}' file
590                               ^^
#                     in case there are no matching lines, print 0

由于您只是计算包含文本" Feb2016"的那些行,您还可以添加过滤器:

awk -F- '/Feb2016/{sum+=$3} END{print sum+0}' file
#        ^^^^^^^^^
#        just on lines containing the string "Feb2016"

答案 1 :(得分:1)

$ cat data 
Feb2016-2016-110
Feb2016-2016-20
Feb2016-2016-220
Feb2016-2016-140
Feb2016-2016-100
$ cut -d - -f 3 data | paste -s -d '+' | bc
590
$