2017-10-17 78 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 
相关问题