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

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

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

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

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コマンドの使いかたの紹介でした。