Text-Processing
刪除文件中所有計數少於 5 次的單詞
我有一個文本文件,每行都有一個字元串,例如:
zanzibar apple banana apple carrot banana sausage apple apricot tea apple apple
我正在嘗試讀取文件,計算每個單詞,以及要刪除的計數小於 5 的單詞。出現超過 5 次的單詞只留下一次。
對於上述情況,新文件應該有
apple
因為它在文件中出現超過 5 次。
到目前為止,我嘗試的是第一步 -> 刪除出現少於 5 次的字元串,但即使這樣似乎也不起作用。新文件保持為空。
awk -F'\n' ' FNR==NR{ seen[tolower($1)]++; next } seen[tolower($1)] seen[tolower($1)]<5{ delete seen[tolower($1)] } ' all.txt 5-or-more.txt
更新:
我正在執行以下內容:
awk '{ a[tolower($1)]++ } END{ for(word in a){ if(a[word]>5){ print word } } }' all.txt > sorted.txt
你不想
-F'\n'
。這會將欄位分隔符設置為換行符,並且永遠不會做任何有用的事情,因為記錄分隔符保持不變,而且\n
.所有你需要的是這樣的:
$ awk '{ a[tolower($1)]++ } END{ for(word in a){ if(a[word]>=5){ print word } } }' file apple
這會將每個單詞 (
$1
) 保存為數組中的一個鍵,a
每次看到該單詞時都會增加其值。然後,在文件末尾,我們遍歷a
並列印任何 ina
值大於或等於 5 的單詞。
這可能更容易使用
sort
和uniq -c
計數。$ sort --ignore-case all.txt | uniq -c --ignore-case | awk '$1 >= 5 {print $2}' apple