2016-04-27 34 views
1

這裏是日誌的一條線的一個例子:如何使用bash腳本對兩個字段進行分組?

2016-04-24 23:59:45 -1 6bd3fbb8-65ac-4d16-bf32-48659a76c499 2   +15173583107 14  +161760555935 14  de.xxxx-O2 layxxxd 0 1 

我知道如何通過一組提交的,所以這是解決方案:

awk '{arr[$11]+=$12} END {for (i in arr) {print i,arr[i]}}' exmaple.log 

,這將是結果:

xx 144 
layxxxd 49.267 

我的問題是,我怎麼能由兩個字段而不是一個,第一個應該是$11和第二個是$10?所以結果應該更改爲:

layxxxd unknown 100 
layxxxd de.xxxx-O2 44 
+1

嘗試是這樣的:'AWK「{改編[$ $ 11 12 + = $ 12} END {了(我在ARR){ print i,arr [i]}}'exmaple.log' – ritesht93

+0

@ ritesht93不,從不執行'arr [$ 11 $ 12] ...',因爲它將字段的不同組合變成了相同的索引字符串。例如$ 11 =「a」和$ 12 =「bc」會創建與$ 11 =「ab」和$ 12 =「c」相同的數組索引「abc」。請參閱[@ anubhava的答案](http://stackoverflow.com/a/36885254/1745001)瞭解一種有效的方法。 –

+1

@EdMorton噢謝謝..這是一個有效的點:) – ritesht93

回答

2

哪能組由兩個領域,而不是一個,首先應該是$11和第二是$10

您可以使用$11 FS $10您的主要關聯數組:

awk '{arr[$11 FS $10] += $12} END {for (i in arr) {print i,arr[i]}}' exmaple.log 
相關問題