wc を実行して単語数のみを表示する

wc を実行して単語数のみを表示する

~/dictwords.txtファイル で見つかった単語の数を含む というファイルを作成しようとしています/usr/share/dict/words

すでにファイルを作成していましたが、間違って echo コマンドを実行したため削除しました。その後、このコマンドを試してみたところ、正しいと思ったのでとても興奮しました。

wc -w /usr/share/dict/words > ~/dictwords.txt

まだ間違っています。ファイル名なしで番号だけを指定する必要があります。

答え1

デフォルトでは、wcファイル名とともに結果が出力されます。結果のみが必要な場合は、wcstdin から入力を読み取る必要があります。

</usr/share/dict/words wc -w > ~/dicwords.txt

wc現在のソリューションでは、、、などの他のツールを使用してcut、からの結果のみを取得できますawkgrep

wc -w /usr/share/dict/words | cut -d' ' -f1 > ~/dicwords.txt

wcただし、これは数字の前にスペース文字を追加しない実装を前提としていますが、すべてのwc実装がそうであるとは限りません。

答え2

スクリプト内で単語数を使用する必要がある場合は、値を変数に保存できます。

numWords=$(wc -w /usr/share/dict/words | tr -dc '0-9')

それ以外の場合は、ファイルに保存できます。

wc -w /usr/share/dict/words | tr -dc '0-9' > ~/dicwords.txt

答え3

ファイルには/usr/share/dict/words1 行につき 1 つの単語が含まれている必要があります。一部のシステムでは、1 行につき 1 つの「辞書用語」が含まれていて、それぞれがスペースで区切られた複数の単語で構成されている可能性があると思いますが、私はこれを見たことがありません。

行数を取得するには、次のいずれかを使用します。

  • wc -l </usr/share/dict/words(ファイル内の改行の数を数えます)
  • sed -n '$=' /usr/share/dict/words(最後の行に現在の行番号を出力します)
  • awk 'END { print NR }' /usr/share/dict/words(入力終了時に読み込んだレコード数(行数)を出力します)
  • grep -c '[^[:space:]]' /usr/share/dict/words(少なくとも 1 つの非スペース文字を含む行の数を数えます)

これらのうち、wc -lバリエーションは実際の数字の前や後に余分なスペースを出力する場合と出力しない場合があるため、移植性が最も低くなります。

答え4

catここでは、結果の後にファイル名が印刷されないようにする を 使用した解決策を示します。

cat /usr/share/dict/words | wc -w

関連情報