2012-03-07 71 views
0

我有以下腳本解析一些|分隔的字段/值對。示例數據看起來像 | Apple = 32.23 | Banana = 1232.12 | Grape = 12312 | Pear = 231 | Grape = 1231 |排序和計數的方法比cat file |更快排序| uniq -c

我只是想計算A,B或C字段名稱在日誌文件中出現的次數。字段列表需要是動態的。日誌文件每個文件大小約爲500兆,所以需要一段時間才能對每個文件進行排序。一旦我完成剪切並獲得每行一個字段的文件,是否有更快的方法來進行計數?

cat /bb/logs/$dir/$file.txt | tr -s "|" "\n" | cut -d "=" -f 1 | sort | uniq -c > /data/logs/$dir/$file.txt.count 

我知道這部分運行速度很快。我可以肯定地看到它陷入了困境。

cat /bb/logs/$dir/$file.txt | tr -s "|" "\n" | cut -d "=" -f 1 

我已運行切割的樣輸出低於,當然該文件是更長的時間

Apple 
Banana 
Grape 
Pear 
Grape 

排序後和計數後,我得到

1 Apple 
1 Banana 
1 Pear 
2 Grape 

的問題是我的實際數據排序太長了。我認爲將剪輯的輸出轉換爲文件的速度會更快,但不能確定在「大」文本文件中計算唯一條目的最快方法。

+0

後一些示例數據和UR所需的O/P – Teja 2012-03-07 21:29:37

+0

將發佈東西有點 – personalt 2012-03-07 21:36:20

+0

還好..這shud被罰款 – Teja 2012-03-07 21:41:11

回答

3

AWK可以很好地完成而不需要排序,試試這個吧應該表現更好;

cat test.txt | tr -s "|" "\n" | cut -d "=" -f 1 | 
    awk '{count[$1]++}END{for(c in count) print c,"found "count[c]" times."}' 
+0

謝謝..我會在幾分鐘內試試這個樣品 – personalt 2012-03-07 21:53:00

+0

這樣快...... – personalt 2012-03-07 21:56:21