0

为了好玩,我想用命令行工具在 bash 中编写这个脚本。

# make the corpus
echo -e "this \t is   a \n cor-pus;  \nthis  \t\nis \n\t sparta. \n" > corpus.txt

# munge, collapse whitespace, tokenize
cat corpus.txt | tr -d '.!@#$%^&*()-_=+' | tr '\t' ' ' | tr '\n' ' ' | tr -s ' ' | fmt -1 | uniq -c | sort -rn

我预计

   2 this
   2 is
   1 a
   1 corpus
   1 sparta

但我明白了

   1 this
   1 is
   1 a
   1 corpus
   1 this
   1 is
   1 sparta

uniq管道时失败fmt -1。也许有我看不到的 eof 字符cat -e?如何uniq决定什么是行,什么是文件?

echo a a b | fmt -1 | uniq也符合我的预期,所以我不知道为什么... | fmt -1 | uniq | ...我的脚本中的 不起作用。

谢谢

4

1 回答 1

3

您需要在调用之前进行排序uniq,因为uniq它的输入需要被排序。所以:

< corpus.txt tr -d '.!@#$%^&*()-_=+' | tr -s '\t ' '\n' | sort | uniq -c | sort -rn
于 2012-09-06T04:50:16.653 回答