2012-11-15 49 views
0

所有,獲取唯一值的數量在一個特定的線位置在一個大的文本文件

我有一個大型的服務器日誌,包含條目: 不是從模塊

馬上就找到之後它是一個引號符合模塊的位置。該文件長度超過4,800行,每個模塊可能會出現超過100次。所以,我想要做的就像是一個wc -l,但是隻顯示服務器日誌的模塊名稱部分中的唯一值的數量。有任何想法嗎?

+1

爲什麼不使用'uniq -c'來計算所有唯一值? – squiguy

+0

是一個「引號」單引號'''還是雙引號'''並且在模塊ID末尾是否有匹配的?發佈一些小的,有代表性的樣本輸入和期望的輸出。 –

回答

2

grep -oP '(?<=not found from Module ")[^"]+(?=")' logfile | sort -u | wc -l

0
awk '{count[$NF]++} END{ for (mod in count) print mod, count[mod] }' file 

可能是接近你想要什麼,但它很難沒有一些樣本輸入和期望輸出猜測。

0
perl -nlwe '$a{$_}++ }{ print "$_ : $a{$_}" for keys %a' log.txt 

爲每一行創建一個散列鍵,然後在最後打印鍵。

2
grep 'entry: not found from Module' logfile | sort -u | wc -l 
+0

在調用'uniq'前忘記'排序' –

+0

@WinnieNicklaus是的,只是修正了它。我只想指出我的答案,可能沒有必要在這裏使用Perl的正則表達式。 –

+0

嗯,可能有其他信息而不僅僅是模塊名稱,所以最簡單的方法是隻提取模塊名稱而不是包含模塊名稱的整行 –

相關問題