text.txt
以下のようなファイルがあるとします。
she likes cats, and he likes cats too.
結果を次のようにしたいと思います。
she 1
likes 2
cats 2
and 1
he 1
too 1
そこに入れるspace , .
とスクリプトが簡単になるのであれば、それで問題ありません。
これを実現できる単純なシェルパイプラインはありますか?
これが私の心の近くで大切なワンライナーです:
cat text.txt | sed 's|[,.]||g' | tr ' ' '\n' | sort | uniq -c
sedは句読点を削除し(正規表現を好みに合わせて調整)、trは結果を1行に1語ずつ入力します。
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
しかし、それは一般的に「単語」を識別する方法の問題を解決しません。