我想计算文本文件中相同单词的数量,并按降序显示它们。 到目前为止,我有:
cat sample.txt | tr ' ' '\n' | sort | uniq -c | sort -nr
除了包含逗号,句号等特殊字符的事实外,这主要是给我满意的输出。和连字符。
如何修改现有命令以不包含上述特殊字符?
答案 0 :(得分: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 :(得分:0)
首先使用grep
提取单词:
grep -o "\w\+" sample.txt | sort | uniq -c | sort -nr