2012-05-11 64 views
1

我有一個這樣的文件:使用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] 
... 

我想產生可計算每個日期時間的出現次數的數量CSV文件。

例如

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

是否有可能使用sed或grep或兩者來執行此操作?

回答

3

試試這個:

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

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

感謝王子。你可以提供完整的命令,只是稍微與...感謝。 – dublintech

+0

@dublintech:立即嘗試。 –

+0

這給:AWK:在表達 uniq的 ' ':' ^無效字符{打印 的awk':寫錯誤。我在windows上使用gnu awk,並從cygwin中進行排序。 – dublintech

2

我不知道sed的,因爲你沒有在SED哈希表,但你可以用一個perl一個襯墊做...

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

-1公然UUOC –

+0

@WilliamPursell這是嚴重的小 – Benj

+0

爲了進一步闡述:Perl的readline的操作符(<>)做了偉大的工作,處理ARGV文件,它是一個DIS服務向世界延續以往的做法不使用它。 –

0

這是awk處理得很好的工作。它都可以在1個線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 
相關問題