2011-07-19 17 views
1

有多個句子行,它們位於其中一個輸出中。使用awk基於單詞總結數字

[%d][%d] msg_sent = %result 

[%d][%d] msg_sent_node number = %result2 

其中%d,$ result和$ result2是數字。

這些行是隨機排列的。

我想總結%result和%result2中的所有數字,因此它將在結尾處打印2個數字(第一個是所有數字的總和,結果爲%,第二個是所有數字的總和在%RESULT2格式。)

例如,如果文件包括以下4條線路

[1][1] msg_sent = 5000 
[1][2] msg_sent = 6000 
[1][2] msg_sent_node number = 100 
[1][1] msg_sent_node number = 200 

我想2倍輸出的數字是11000,和300

我如何能做到這一點用awk ?

回答

2
awk '/msg_sent_node number/ { node_total += $5 } /msg_sent/ { sent_total = sent_total + $4} END { print sent_total " " node_total }' 

這可能是更容易理解,如果這樣寫這樣:

/msg_sent_node number/ { node_total += $5 } 
/msg_sent/ { sent_total += $4} 
END { print sent_total " " node_total } 
+0

我認爲這是一種令人驚歎的語言。 – user482594

+0

'print sent_total,node_total'具有相同的輸出 –

+1

並非所有東西都必須是正則表達式:'$ 2 ==「msg_sent」{sent_total + = $ 4}' –

0

一個非常基本的和不那麼通用腳本來完成,這將是如下:

awk '{ if ($3 == "number") { b += $5 } else { a += $4 } } END { print a " " b }' file