Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 列出文本文件中的所有单词及其出现次数?_Bash_Sed_Awk - Fatal编程技术网

Bash 列出文本文件中的所有单词及其出现次数?

Bash 列出文本文件中的所有单词及其出现次数?,bash,sed,awk,Bash,Sed,Awk,假设我有如下文件text.txt: 她喜欢猫,他也喜欢猫。 我希望我的结果如下所示: she 1 likes 2 cats 2 and 1 he 1 too 1 如果将空格、.放入其中会使脚本更容易,那就好了 有没有一个简单的壳牌管道可以做到这一点?这是一个离我心不远的内衬: cat text.txt | sed 's|[,.]||g' | tr ' ' '\n' | sort | uniq -c sed去除标点符号(根据口味调整正则表达式),tr将结果每行一个单词。使用GNU awk,您可

假设我有如下文件
text.txt

她喜欢猫,他也喜欢猫。

我希望我的结果如下所示:

she 1
likes 2
cats 2
and 1
he 1
too 1
如果将
空格、.
放入其中会使脚本更容易,那就好了


有没有一个简单的壳牌管道可以做到这一点?

这是一个离我心不远的内衬:

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

sed去除标点符号(根据口味调整正则表达式),tr将结果每行一个单词。

使用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

但这并不能解决你如何识别“单词”的问题。

UOOC和sed将把“foo,bar”合并成一个单词“foobar”。这是公平的。使用类似于
“s |[,.]| | g'
的模式,其中替换模式包括空格,可以避免这些连接。如果短语是“我的一只猫重500磅,那只猫超大!”-是一只猫加上一只猫还是其他什么?那句话里有一个“s”字吗?有一个单词“500”和一个单词“lbs”或一个单词“500lbs”或其他什么吗?有一个词“超级”和一个词“大小”还是一个词“超级大小”?