2012-05-11 7 views
1

私はこのようなファイルを持っている:私は、各日付の時間の出現箇所の数をカウントしたCSVファイルを生成したいgrepまたはsedを使用してファイル内の文字列をカウントしますか?

[10/May/2012:00:00:03 +0000] 
[10/May/2012:00:00:03 +0000] 
[10/May/2012:00:00:03 +0000] 
[10/May/2012:00:00:03 +0000] 
[10/May/2012:00:00:06 +0000] 
[10/May/2012:00:00:06 +0000] 
... 

を。

[10/May/2012:00:00:03 +0000], 4 
[10/May/2012:00:00:06 +0000], 2 
... 

これはsedまたはgrep、またはその両方を使用して行うことはできますか?

答えて

3

この試してみてください:あなたはSEDでハッシュテーブルを持っていないので、私はsedは知りませんが、あなたはperlの1つのライナーでそれを行うことができます

sort inputFile | uniq -c | awk '{print $2", "$1}' 

または

sort inputFile | uniq -c | sed 's;^\s*\([0-9]*\)\s*\(.*\)$;\2, \1;' 
+0

おかげ王子それはすべて、このような1行のawkで行うことができます。あなたはフルコマンドを提供できますか?わずかに混乱しています...ありがとうございます。 – dublintech

+0

@dublintech:今すぐお試しください。 –

+0

それは与える:awk: '{print awk:^無効なchar' ''式 uniq:書き込みエラーです。私はWindowsでgnu awkを使い、cygwinからソートしています。 – dublintech

2

を...

perl -e 'while (<>) {chomp; $a{$_}++}; for $k (keys %a) { print "$k $a{$k}\n"; }' file.txt 
+0

-1 for blatant uuoc –

+0

@WilliamPursellそれほど些細なことです – Benj

+0

さらに詳しく説明します:perlのreadline演算子(<>)はARGVファイルを処理する素晴らしい仕事をしています。それを使用していない。 –

0

これはawkによってうまく処理された仕事です。

awk '{ts[$0]++;} END{for (var in ts) print var",", ts[var];}' file.txt 

出力:

[10/May/2012:00:00:03 +0000], 4 
[10/May/2012:00:00:06 +0000], 2 
関連する問題