0

楽しみのために、このスクリプトをコマンドラインutilsを使用して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 に答える