Linux
在文本中查找出現 10 次或更多次的所有單詞
我得到了一個 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(儘管重音字元以其組合形式出現,但它們不會出現在該文本中)。