2016-05-04 21 views
1

我想添加每行的所有第三個字段並生成結果。如何在某個列中添加所有值?

下面是我解決了這個問題

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

+0

我懷疑這是工作,因爲'總和= $(表達式$總和+ $ LINE)'是不是一個有效的語法。 '='周圍的空格應該被刪除。 – fedorqui

+0

同意fedorqui。沒有實現上面的代碼。但它解決的邏輯和方式絕對是正確的,不需要修改語法。 – user3624000

回答

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

這是有效的。謝謝Fedorqui。 – user3624000

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 
$ 
+0

如果只有awk可以處理它,那麼爲什麼要這麼管呢? – fedorqui

+1

@fedorqui是的,管道上方產生3個過程;我正要發佈'awk'版本,但你幾秒鐘就打敗了我..所以剛剛發佈了另一個版本 – ritesht93

+0

在這種情況下,'cut'會更輕。 –

相關問題