2017-10-17 142 views
1

我想計算文本文件中相同單詞的數量並按降序顯示它們。 到目前爲止,我有:Bash - 計算文本文件中出現的次數並以降序顯示

cat sample.txt | tr ' ' '\n' | sort | uniq -c | sort -nr 

其中大部分是給我滿足,除了一個事實,即它包含特殊字符,如逗號,句號,輸出!和連字符。

如何修改現有命令不包含上述特殊字符?

+1

使用'tr -d'刪除特殊字符。 – Barmar

回答

1

可以使用tr你想刪除的字母的合成絃線。

例子:

$ echo "abc, def. ghi! boss-man" | tr -d ',.!' 
abc def ghi boss-man 

或者,使用POSIX字符類明知boss-man例如將成爲bossman

$ echo "abc, def. ghi! boss-man" | tr -d [:punct:] 
abc def ghi bossman 

旁註:你可以有更多的控制和速度通過使用awk爲此:

$ echo "one two one! one. oneone 
two two three two-one three" | 
awk 'BEGIN{RS="[^[:alpha:]]"} 
    /[[:alpha:]]/ {seen[$1]++} 
    END{for (e in seen) print seen[e], e}' | 
sort -k1,1nr -k2,2 
4 one 
4 two 
2 three 
1 oneone 
+1

我喜歡tr -d [:punct:]的解決方案。謝謝。 – Wub

+0

即時消息得到我想要的輸出,但是當我運行命令連字符仍然被視爲不可見字段?假設我在命令行中發生了諸如8馬鈴薯5馬鈴薯3(它是連字符但你看不到它)的事件 – Wub

0

如何提取第一單詞,grep

grep -o "\w\+" sample.txt | sort | uniq -c | sort -nr 
相關問題