410gone.click

©2021 sumomo-99

[Linux] 文字数や行数を数えるwcコマンドの使いかた

更新日: 2021-04-11T08:28:16.675Z

Linux

wcコマンドは、ファイル中のバイト数、文字数、空白で区切られた単語数、行数を数えます。

wc - print newline, word, and byte counts for each file

wcマンドはGNU Coreutilsに含まれています。ここでは、wcコマンドの基本的な使い方を紹介します。
※以降の実行例は、Ubuntu17.10で確認しています。

目次

  • 1. wcコマンドの使い方
  • 2. wcコマンドの使用例
    • 2.1. オプションなし - 行数、単語数、バイト数
    • 2.2. 最大幅(列)
  • 3. 結果の表示順番
  • 4. 復数のファイルを数える
  • 5. 日本語の場合

wcコマンドの使い方

wc [option]... [file]...
wc [option]... --files0-from=F

fileを指定しない場合もしくは'-'を指定した場合は、標準入力から読み込みます。
option説明-c, --bytesバイトを数えます。-m, --chars文字を数えます。-l, --lines行を数えます。--files0-from=FファイルFに書かれたファイルから読み込みます。ファイル名の区切りはNULである必要があります。-L, --max-line-length最大の表示(列)幅を数えます。タブスペースは8文字として置き換えられます。-w, --words単語を数えます。--helpヘルプを表示します。--versionバージョンを表示します。

2. wcコマンドの使用例

2.1. オプションなし - 行数、単語数、バイト数

wcコマンドをオプションなしで利用すると、行数、単語数、バイト数の3つを数えて表示します。

$ wc /etc/passwd
  35   48 1818 /etc/passwd

オプションなしは、'-l', '-w', '-c'の3つのオプションを指定した場合と同じ結果になります。

$ wc -lwc /etc/passwd
  35   48 1818 /etc/passwd

2.2. 最大幅(列)

wcコマンドの'-L'オプションを利用すると、最大幅(最大の列幅)を表示することができます。

$ wc -L /etc/passwd
85 /etc/passwd

3. 結果の表示順番

オプションをどのような順番で指定しても、結果は以下の順番に表示されます。

行数 単語数 文字数 バイト数 最大幅
$ wc -lwc /etc/passwd
  35   48 1818 /etc/passwd
$ wc -clw /etc/passwd
  35   48 1818 /etc/passwd

それぞれの表示は項目ごとに右詰めで表示されますが、オプションを1つだけ指定した場合は、左詰めで表示されます。

$ wc -c /etc/passwd
1818 /etc/passwd

4. 復数のファイルを数える

シェルの展開機能を利用して、復数ファイルを数えることもできます。

$ wc /etc/logrotate.d/*
   9   10  126 /etc/logrotate.d/apport
  16   18  173 /etc/logrotate.d/apt
  18   28  232 /etc/logrotate.d/dpkg
   9   11  146 /etc/logrotate.d/lxd
  12   21  196 /etc/logrotate.d/netdata
  15   28  351 /etc/logrotate.d/nginx
  42  129 1029 /etc/logrotate.d/psaccs_atop
  26   71  541 /etc/logrotate.d/psaccu_atop
  37   46  515 /etc/logrotate.d/rsyslog
  10   11  235 /etc/logrotate.d/unattended-upgrades
 194  373 3544 合計

復数のファイルを指定すると、最後に対象ファイルの合計を表示します。tailコマンドと組み合わせることで、対象ファイルの合計だけ表示させることもできます。

$ wc /etc/logrotate.d/* | tail -n1
 194  373 3544 合計

 
'--files0-from'オプションを利用することもできます。 以下の例ではfindの'-print0'オプションでNUL区切りで出力した結果をwcに引き渡しています。

$ find /etc/logrotate.d -type f -print0 | wc --files0-from=-
16 18 173 /etc/logrotate.d/apt
10 11 235 /etc/logrotate.d/unattended-upgrades
9 10 126 /etc/logrotate.d/apport
12 21 196 /etc/logrotate.d/netdata
26 71 541 /etc/logrotate.d/psaccu_atop
9 11 146 /etc/logrotate.d/lxd
42 129 1029 /etc/logrotate.d/psaccs_atop
15 28 351 /etc/logrotate.d/nginx
37 46 515 /etc/logrotate.d/rsyslog
18 28 232 /etc/logrotate.d/dpkg
194 373 3544 合計

5. 日本語の場合

日本語のテキストでwcコマンドを実行してみます。

$ cat wctest.txt
空を道とし、道を空とみる。
オレの未来は、毎朝起きた時にはじまる。
$ wc wctest.txt
 2  2 98 wctest.txt

空白区切りが単語として数えます。日本語の単語は空白区切りではないので、1行が1単語として数えられています。
 
以上、文字数や行数を数えるwcコマンドの使いかたの紹介でした。