ファイル内の各単語の数を見つける方法は?
テキストパイプラインまたは文書内の各単語のヒストグラムが必要です。ドキュメントに新しい行と空の行が表示されます。私は私の体を除いてすべてをはがしました[a-zA-Z]
。
> cat doc.txt
word second third
word really
> cat doc.txt | ... # then count occurrences of each word \
# and print in descending order separated by delimiter
word 2
really 1
second 1
third 1
ファイルが1GBのテキストであり、指数関数的なタイムロードを処理できないため、やや効率的でなければなりません。
答え1
この試み:
grep -o '\w*' doc.txt | sort | uniq -c | sort -nr
-o
一致する行の代わりに各一致を印刷します。\w*
単語文字の一致sort
パイプで接続する前に一致を並べ替えてくださいuniq
。uniq -c
一意の行と発生回数を印刷します。-c
sort -nr
発生回数に基づいて逆順にソートします。
出力:
2 word
1 third
1 second
1 really
選ぶ:
awk
正確な出力のために:
$ grep -o '\w*' doc.txt \
| awk '{seen[$0]++} END{for(s in seen){print s,seen[s]}}' \
| sort -k2r
word 2
really 1
second 1
third 1
答え2
perl -lnE '
$count{$_}++ for /[[:alpha:]]+/g;
END {
say "@$_" for
sort {$b->[1] <=> $a->[1] || $a->[0] cmp $b->[0]}
map {[$_, $count{$_}]}
keys %count
}
' doc.txt
これはpLumoの初期ソリューションよりも多くのメモリを消費します。