ファイルの総単語数を計算する方法は?

ファイルの総単語数を計算する方法は?

ファイル内のすべての単語数を計算するコマンドを探しています。たとえば、ファイルが次のような場合、

today is a 
good day

5その後、そこに単語があるので印刷する必要があります5

答え1

このコマンドwcはとも呼ばれます。単語数は次のとおりです。

$ wc -w <file>

はい

$ cat sample.txt
today is a 
good day


$ wc -w sample.txt
5 sample.txt


# just the number (thanks to Stephane Chazelas' comment)
$ wc -w < sample.txt
5

答え2

私は数字のせいでこれを思い出しました。

wc -w [file] | cut -d' ' -f1

5

私もこのwc -w < [file]方法が好き

最後に、変数に単語数だけを保存するには、次を使用できます。

myVar=($(wc -w /path/to/file))

これにより、ファイル名を正常にスキップできます。

答え3

より良い解決策はPerlを使用することです。

perl -nle '$word += scalar(split(/\s+/, $_)); END{print $word}' filename

@bernhard

coreutilsでコマンドのソースコードを確認できますwc。私のコンピュータでテストしましたが、ファイルはsubst.cbash 4.2のソースコードにあります。

time wc -w subst.c

real    0m0.025s
user    0m0.016s
sys     0m0.000s

そして

time perl -nle '$word += scalar(split(" ", $_)); END{print $word}' subst.c

real    0m0.021s
user    0m0.016s
sys     0m0.004s

ファイルが大きいほど、Perlはwc

答え4

プログラムwcは「単語」を計算しますが、これは多くの人がファイルを調べるときに見る「単語」ではありません。たとえば、viプログラムは、「単語」のさまざまな測定値を使用して、文字のカテゴリに応じて区切り、wc単に数字を数えることです。スペースで区切る。両方の測定値はかなり異なる場合があります。次の例を考えてみましょう。

first,second

viよりサム性格(最初そして第二そしてそれを区切るカンマ)もwc参照してください。一つ(この行にはスペースはありません)。単語数を数える方法はいくつかありますが、一部は他のものよりもあまり役に立ちません。

Perlはviスタイルの単語のためのカウンタを書くのに適していますが、以下は、およびを使用するsed簡単trな例wcです(リテラルキャリッジリターンを使用すると適切に移植可能^M)。

#!/bin/sh
in_words="[[:alnum:]_]"
in_punct="[][{}\\|:\"';<>,./?\`~!@#$%^&*()+=-]"
sed     -e "s/\($in_words\)\($in_punct\)/\1^M\2/g" \
        -e "s/\($in_punct\)\($in_words\)/\1^M\2/g" \
        -e "s/[[:space:]]/^M/g" \
        "$@" |
tr '\r' '\n' |
sed     -e '/^$/d' |
wc      -l

数の比較:

  • スクリプト自体を実行すると、76の単語が出ました。
  • @cuonglmのPerlの例は31を提供します。
  • 使用するとwc28になります。

参考までに、POSIX vi説明する:

POSIXロケールでは、viは5種類の単語を認識する必要があります。

  1. 次の区切り文字で区切られた文字、数字、アンダースコアの最大順序:

    • 文字、数字、下線以外の文字

    • 行の始まりまたは終わり

    • バッファの開始または終了の編集

  2. 文字、数字、下線、または文字を除く最大の文字シーケンスで、次の区切り文字で区切られます。

    • 文字、数字、下線
    • <blank>数値
    • 行の始まりまたは終わり
    • バッファの開始または終了の編集
  3. 1つ以上の連続した空行

  4. バッファの最初の文字の編集

  5. 最後の雨<newline>編集バッファから

関連情報