2013-03-24 50 views
1

給定一個multilangual .txt文件如:awk:從一個文本文件的字符頻率?

But where is Esope the holly Bastard 
But where is 생 지 옥 이 군 
지 옥 이 
지 옥 
지 
我 是 你 的 爸 爸 ! 
爸 爸 ! ! ! 
你 不 會 的 ! 

計數空格分隔單詞使用該awk中功能詞頻:

$ awk '{a[$1]++}END{for(k in a)print a[k],k}' RS=" |\n" myfile.txt | sort 

獲取優雅:

1 생 
1 군 
1 Bastard 
1 Esope 
1 holly 
1 the 
1 不 
1 我 
1 是 
1 會 
2 이 
2 But 
2 is 
2 where 
2 你 
2 的 
3 옥 
4 지 
4 爸 
5 ! 

如何改變它來計算字符頻率?


編輯:對於人物頻率,我用(@ Sudo_O的答案):

$ grep -o '\S' myfile.txt | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > myoutput.txt 

對於詞頻,用途:

$ grep -o '\w*' myfile.txt | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > myoutput.txt 

回答

3

一種方法:

$ grep -o '\S' file | awk '{a[$1]++}END{for(k in a)print a[k],k}' 
3 옥 
4 h 
2 u 
2 i 
3 B 
5 ! 
2 w 
4 爸 
1 군 
4 지 
1 y 
2 l 
1 E 
1 會 
2 你 
1 是 
2 a 
1 不 
2 이 
2 o 
1 p 
2 的 
1 d 
1 생 
3 r 
6 e 
4 s 
1 我 
4 t 

使用重定向到輸出保存到一個文件:

$ grep -o '\S' file | awk '{a[$1]++}END{for(k in a)print a[k],k}' > output 

併爲有序輸出:

$ grep -o '\S' file | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > output 
+0

謝謝!快樂你回答! – Hugolpz 2013-03-24 18:07:52

+1

有趣,都是** $ grep -o。文件**和** $ grep -o'\ S'文件**有效。他們都正確嗎? – Hugolpz 2013-03-24 18:25:09

+2

@Hugolpz好點。不,它是不正確的..最初我發佈了'grep -o .',但是會匹配空格,所以我將它改爲'grep -o'\ S'',其中'\ S'是正則表達式的簡寫符合任何非空格字符。 – 2013-03-24 18:27:34