【发布时间】:2017-10-17 21:43:40
【问题描述】:
我想计算文本文件中相同单词的数量并按降序显示它们。 到目前为止我有:
cat sample.txt | tr ' ' '\n' | sort | uniq -c | sort -nr
除了包含逗号、句号、!和连字符。
如何修改现有命令以不包含上述特殊字符?
【问题讨论】:
-
使用
tr -d删除特殊字符。
标签: bash ubuntu command-line
我想计算文本文件中相同单词的数量并按降序显示它们。 到目前为止我有:
cat sample.txt | tr ' ' '\n' | sort | uniq -c | sort -nr
除了包含逗号、句号、!和连字符。
如何修改现有命令以不包含上述特殊字符?
【问题讨论】:
tr -d删除特殊字符。
标签: bash ubuntu command-line
您可以将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
【讨论】:
先用grep提取单词怎么样:
grep -o "\w\+" sample.txt | sort | uniq -c | sort -nr
【讨论】: