[Linux] ファイルの行数や文字数をカウントする – wc

  • このエントリーをはてなブックマークに追加
  • LINEで送る
この記事は 2019年11月27日 に書かれたものです

ファイルの文字数や行数を簡単にカウントできるのがwcコマンドです。
恐らく「Word Count」の略称で、ワールドカップでもトイレでもありませんw

以下のように調査したいファイルのパスを渡すと、ファイルの行数、単語数、バイト数を表示してくれます。

$ wc Linux*.md
      45      86    2384 Linuxの使い方.md
     392    1223   12589 Linuxコマンド.md
      17      17     343 Linux上のアカウント.md
     454    1326   15316 total

注意点として、ファイルの文字コードはUTF-8、改行コードをLFにしておくと安全に(正しく)集計が行えます。

- Sponsored Link -

利用方法

行数を調べる

-lオプションで行数をカウントできます。

$ wc -l Linuxの使い方.md
      45 Linuxの使い方.md

パイプを利用すれば、直前のコマンドの実行結果の行数のカウントも可能です。

$ ls -1 . | wc -l

バイト数を調べる

ファイル容量を調べるには-cオプションを利用します。

$ wc -c Linuxの使い方.md
    2384 Linuxの使い方.md

文字数を調べる

文字数を調べるには-mオプションを利用します。日本語などのマルチバイトに対応していますが、文字コードをUTF-8にしておく必要があります。

$ wc -m Linuxの使い方.md
    1240 Linuxの使い方.md

また対応していないロケールでは-cと同じ意味になるそうです。(macOSのman wcより)

-m The number of characters in each input file is written to the standard output. If the current locale does not support multibyte characters, this is equivalent to the -c option. This will cancel out any prior usage of the -c option.

その他

警告が表示され集計結果がおかしい

時折、以下のような警告をwcが吐くことがあります。値は出ているのでカウント自体はしてくれるのですがちょっと気持ち悪いですね。というかよく見ると文字数も正確にカウントしてくれてないようです。

$ cat a.txt 
あいうえお
かきくけこ
さしすせそ

$ wc -m a.txt
wc: a.txt: Illegal byte sequence
      36 a.txt

この現象はどうやら以下の条件下で発生するようです。

  • 日本語が含まれる(マルチバイト)
  • UTF-8以外のエンコード(ShiftJISなど)
  • Windowsの改行コード(CR+LF)

というわけで、文字コードをUTF-8に変換しつつ、改行コードをLinuxやmacOSなどで利用されるLFに変換してやると警告が出なくなります。

$ nkf -w80 -Lu a.txt | wc -m
      18

そもそもUTF-8でないと正確に集計できないようですので、文字コードの確認はお忘れなきよう。


コメント

コメント欄は休止中です。お問い合わせはこちらからどうぞ。ご質問はTwitterにリプを投げてください。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -