Text-Processing

刪除文件中所有計數少於 5 次的單詞

  • October 25, 2022

我有一個文本文件,每行都有一個字元串,例如:

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 的單詞。

這可能更容易使用sortuniq -c計數。

$ sort --ignore-case all.txt |
   uniq -c --ignore-case |
   awk '$1 >= 5 {print $2}'
apple

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