2012-03-07 6 views
0

私は次のスクリプトをいくつか解析しています。区切られたフィールドと値のペア。サンプルデータは次のようになります |アップル= 32.23 |バナナ= 1232.12 |ブドウ= 12312 |ブドウ= 231 |ブドウ= 1231 |メソッドのソートとカウントが速くなり、catファイル|並べ替え| uniq -c

ログファイルにA、B、またはCのフィールド名が何回表示されるかを調べるだけです。フィールドリストは動的である必要があります。ログファイルはそれぞれ約500メガバイトの大きさなので、各ファイルをソートするのに時間がかかります。一度カットを行い、1行に1つのフィールドを持つファイルを取得すると、カウントを行うより速い方法がありますか?

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

ポストは、いくつかのサンプルデータとビットで何かを掲示するウル希望入出力/ P – Teja

+0

は大丈夫 – personalt

+0

...それは大丈夫shud '猫のファイルよりも速く – Teja

答えて

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

+0

これはやや速かった...... – personalt

関連する問題