2013-03-14 106 views
5

假设我有如下文件text.txt列出文本文件中出现次数的所有单词?

she likes cats, and he likes cats too.

我想我的结果是这样的:

she 1 
likes 2 
cats 2 
and 1 
he 1 
too 1 

如果把space , .到它会使脚本更容易,这将是精细。

是否有一个简单的shell管道可以实现这一目标?

+0

如果这句话是“我的一只猫重500磅,那只猫超大尺寸!” - 是猫的数量加上猫的数量还是别的吗?在这句话中是否有一个单词“s”?是否有单词“500”和单词“lbs”或单词“500lbs”或其他?是否有“超级”一词和“大小”一词或“超大”一词? – 2013-03-14 20:58:01

回答

18

这里是一个一行近,亲爱的我的心脏:

cat text.txt | sed 's|[,.]||g' | tr ' ' '\n' | sort | uniq -c 

桑达条标点符号(调正则表达式的味道),在TR使每行的结果一个字。

+0

你太棒了! – JackWM 2013-03-14 03:31:13

+1

然后通过一切手段按下该复选标记按钮。 – phs 2013-03-14 03:31:30

+0

@phs +1态度很好!和幽默。 – 2013-03-14 03:33:55

0

随着GNU awk的你可以指定记录分隔符(RS)是的非字母字符的序列:

$ gawk -v RS='[^[:alpha:]]+' '{sum[$0]++} END{for (word in sum) print word,sum[word]}' file 
she 1 
likes 2 
and 1 
too 1 
he 1 
cats 2 

但这不会解决你的如何识别“字”的问题一般。

相关问题