使用终端但使用 cat“grep”在 txt 文件中查找 n 个最常见的单词。和 tr -d "/r" 命令

使用终端但使用 cat“grep”在 txt 文件中查找 n 个最常见的单词。和 tr -d "/r" 命令

我想找到n文本文件中最常见的单词,但具有以下条件:

  • cat获取文件。
  • grep .得到的话。
  • tr -d '/r'摆脱新线。

我已经设法让代码的后半部分与|sort | uniq -c | sort -nr| head -10.

答案1

您提到了 的使用grep,但如果目标是找到最常见的单词,我真的不认为有必要使用它。更有可能的是,您只想将文本文件拆分为单词,然后运行| sort | uniq -c | sort -nr | head -10管道。

立即想到的解决方案(毫无疑问有许多替代解决方案)是通过以下方式使用正则表达式sed

sed 's/\s/\n/g'

\s这只是说明用单个换行符 ( )替换所有空白字符 ( ) \n。结合在一起,我认为你的解决方案看起来像这样:

cat [file] | sed 's/\s/\n/g' | sort | uniq -c | sort -nr | head -10 | awk '{print $2}'

我在最后添加了awk '{print $2}'仅显示单词(而不是计数),但这完全取决于脚本的目的。

答案2

这听起来像是一项家庭作业。

cat遵循、greptr、匹配大小写 (HE=He=he=hE) 以及以标点符号结尾的单词 (he.=he=he,=he!)的所有要求:

for word in $(
  cat derp.txt | \
  tr '[:upper:]' '[:lower:]' | \
  tr -d '[:punct:]' | \
  tr -d '/r'
)
do
  words[$word]=$(cat derp.txt | grep -c $word)
  echo "${words[$word]} $word" # lots of duplicate output that's filtered out below.
done | sort -u | tail -n 10

grep .匹配所有内容,所以这是一个错字吗?

在这种情况下毫无意义,因为循环的tr -d '\r'输入字段分隔符将空格和换行符视为分隔符。IFSfor

Jason K Lai 的解决方案可能是最好的。

相关内容