Linux

在文本中查找出現 10 次或更多次的所有單詞

  • November 30, 2016

我得到了一個 txt 文件(戰爭與和平..),我需要創建一個文本文件,按字母順序排列所有出現 10 次或更多次的單詞(沒有數量)。

這個問題的轉折點在於,每個標點符號都被認為是一個新詞的開頭,這意味著你被認為是兩個詞,你是。

我把所有標點符號都換成新行,把所有空格換成新行。而且我使用了 trim -c 所以現在我有了所有的單詞和它們的計數,不知道如何只顯示那些出現 10 次或更多次的單詞。

任何有關查找所有出現 10 次或更多次的單詞的方法的幫助將不勝感激!

< text tr -cs '[:alnum:]' '[\n*]' |
 awk '++count[$0] == 10' |
 sort

如果要忽略大小寫,請替換$0為。tolower($0)

它將作為字母數字****的補充的字元序列翻譯換行符。列印每個的第 10 次出現。awk

請注意,在 GNU 系統上,tr不能在多字節字元上正常工作。但是,在這些系統上,您可以改用 GNUgrep-o擴展:

< text grep -Eo '[[:alnum:]]+' |
 awk '++count[$0] == 10' |
 sort

您可以將其更改為

< text grep -Eo '[^[:punct:][:space:]]+' |
 awk '++count[$0] == 10' |
 sort

考慮既不是標點符號也不是空格的字元**(或非GNU**系統tr -s '[:punct:][:space:]' '[\n*]'或全 ASCII 文本的以上字元)在該戰爭與和平文本上給出相同結果的字元。

請注意,至少在 GNU 系統上,這仍然可能給出錯誤的結果,因為例如 Unicode 組合重音被歸類為標點符號而不是alnums(儘管重音字元以其組合形式出現,但它們不會出現在該文本中)。

引用自:https://unix.stackexchange.com/questions/326820