Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする
2020/07/27
wcコマンドで行数、単語数、バイト数、文字数をカウント
wcコマンドは Word Countの略で文字数をカウントする
Linuxのコマンドで、指定されたファイル内の行数、単語数、バイト数、文字数をカウントするコマンドである「wc」コマンドについて解説します。
「wc」は「Word Count」の略です。
wcコマンドの基本的な使い方
使用例としては以下のようになります。
1 2 3 4 5 6 |
$ cat file_name2 100 red 赤 200 blue 青 300 yellow 黄 $ wc file_name2 3 9 40 file_name2 |
まずはじめに、「cat」コマンドを使い、「file_name2」の内容を確認し、その後に「wc」コマンドで行数、単語数、バイト数をカウントした結果を表示しています。
「file_name2」の前に表示されている「3」が「行数」、「9」が「単語数」、「40」が「バイト数」となります。
また、複数行をまとめて指定した場合は、下記の様に「合計」の行が追加して表示されます。
1 2 3 4 5 |
$ wc file_name* 3 6 28 file_name1 3 6 24 file_name2 2 4 16 file_name3 8 16 68 合計 |
また、複数行を指定する方法として、下記の様に複数のファイル名をスペースで区切って指定することも出来ます。
1 |
$ wc file_name1 file_name2 file_name3 |
wcコマンドの主なオプション
wcコマンドの主なオプションは以下の通りとなっています。
オプション | 説明 |
---|---|
-c、–bytes | バイト数を表示する |
-l、–lines | 行数を表示する |
-m、–chars | 文字数を表示する(マルチバイト文字に対応) |
-w、–words | 単語数を表示する |
-L、–max-line-length | もっとも長い行の長さを表示する |
–files0-from=リスト | Null文字で区切られたファイル名のリストを指定する(「–files0-from=-」とした場合は、ファイル名を標準入力から読み込む) |
「-l」オプションで行数のみを表示する
オプションを付けない場合は、行数、単語数、バイト数の 3つを表示しますが、行数のみを表示したい場合は「-l」オプションを設定します。
1 2 |
$ wc -l file_name2 3 file_name2 |
「-w」オプションで単語数のみを表示する
オプションを付けない場合は、行数、単語数、バイト数の 3つを表示しますが、単語数のみを表示したい場合は「-w」オプションを設定します。
1 2 |
$ wc -w file_name2 9 file_name2 |
「-c」オプションでバイト数のみを表示する
オプションを付けない場合は、行数、単語数、バイト数の 3つを表示しますが、バイト数のみを表示したい場合は「-c」オプションを設定します。
1 2 |
$ wc -c file_name2 40 file_name2 |
「-m」オプションで文字数のみを表示する
オプションを付けない場合、もしくは、「-c」オプションを付けた場合に表示されるのは「バイト数」ですが、マルチバイトに対応した「文字数」を表示したい場合は「-m」オプションを設定します。
1 2 |
$ wc -m file_name2 34 file_name2 |
行数、単語数、文字数、バイト数の表示順番は決まっている
なお、行数、単語数、文字数、バイト数の表示される順番は「行数、単語数、文字数、バイト数」と決まっており、下記の様にオプションの順番を入れ替えても表示される順番は常に同じとなっています。
1 2 3 4 |
$ wc -l -w -m -c file_name2 3 9 34 40 file_name12 $ wc -m -c -l -w file_name2 3 9 34 40 file_name12 |
「--files0-from=リスト
」オプションでファイルリストを指定してカウントする
「--files0-from=リスト
」オプションは、カウントするファイルのリストを指定するオプションです。
そのため、まず下記の様なファイルリストを作成します。
1 2 3 4 |
$ cat file_list file_name1 file_name2 file_name3 |
しかし、「–files0-from=リスト」オプションで使用することが出来るファイルリストは、改行ではなく Null文字で区切られている必要がありますので、下記の様に「tr」コマンドを使用して改行を Null文字に置換します。
その上で「wc」コマンドに渡します。
1 2 3 4 5 |
$ tr "\n" "\0" < file_list | wc --files0-from=- 3 6 28 file_name1 3 6 24 file_name2 2 4 16 file_name3 8 16 68 合計 |
「--files0-from=リスト
」オプションですが、上記のようにリストに「-」を指定する「--files0-from=-
」形式とすることで標準入力を受け取ることが出来るようになります。
また、「tr」コマンドは文字列を置換するコマンドで、「\n」が改行で、「\0」が Null文字になります。
下記の記事を参考にしてください。
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
「wc」コマンドで表示表示されるカウント数は、スペースで区切られていますので、数値の桁が違うとキレイに並びません。
そんなときは、再び「tr」コマンドを使って、スペースをタブに置換することでキレイに並べることが出来ます。(「\t
」がタブになります。)
1 2 3 4 5 |
$ tr "\n" "\0" < file_list | wc --files0-from=- | tr " " "\t" 3 6 28 file_name1 3 6 24 file_name2 2 4 16 file_name3 8 16 68 合計 |
また、下記の様に「find」コマンドで検索にヒットしたファイルを元にファイルのリストを作成する方法もあります。
1 2 3 4 5 |
$ find . -name "file_name*" -print0 | wc --files0-from=- | tr " " "\t" 3 6 28 file_name1 3 6 24 file_name2 2 4 16 file_name3 8 16 68 合計 |
「find」コマンドの検索結果は通常は改行で区切られますが、「wc」コマンドでは Null文字区切りにする必要がありますので、「-print0」オプションを使用します。
これを利用することで「find」の結果をファイルのリストとして使用することが出来るようになります。
また、「wc」コマンドで出力した結果はここでも「tr」コマンドを利用してタブ区切りに置換し、表示を整えています。
ちなみに、タブ区切りをスペース区切りに変換する場合は「expand」コマンド、スペース区切りをタブ区切りに変換する場合は「unexpand」コマンドなどもあります。
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
wcコマンドで findでヒットしたファイル数をカウントする
wcコマンドは findで検索してヒットしたファイルの数をカウントするときにも使うことが出来ます。
まず、カレントディレクトリ内のファイルを確認します。
1 2 3 4 5 |
$ ls -l 合計 12 -rw-rw-r-- 1 admin admin 30 6月 4 21:32 file_name1 -rw-rw-r-- 1 admin admin 48 6月 4 21:32 file_name2 -rw-rw-r-- 1 admin admin 42 6月 4 21:34 file_name3 |
このディレクトリ内のファイルを「find」コマンドで検索を行い、その結果を「wc」コマンドで行数をカウントすることで検索にヒットした件数をカウントしています。
1 2 |
$ find . -name "file_name*" | wc -l 3 |
上記の例では「file_name」というファイル名が含まれるファイルを検索していますが、カレントディレクトリ内にあるファイルの数をカウントしたい場合は、下記の様に記述します。
1 2 3 4 5 6 |
$ find . -name "*" -type f ./file_name1 ./file_name2 ./file_name3 $ find . -name "*" -type f | wc -l 3 |
ここでのポイントは、「find」で検索する対象を「-type f」でファイルに限定している点です。
下記のように「-type f」を付けずに「find」コマンドを実行すると、カレントディレクトリ自体も検索対象となるため、1行多くカウントされてしまいます。
1 2 3 4 5 6 7 |
$ find . -name "*" . ./file_name1 ./file_name2 ./file_name3 $ find . -name "*" | wc -l 4 |
ちなみに、「ls -l
」で表示された結果でカウントすると、「合計 12」の行も含まれるため、「4行」となってしまいます。
1 2 |
$ ls -l | wc -l 4 |
そのため、「grep」コマンドを使って「合計 12」の行を取り除く必要があります。
1 2 |
$ ls -l | grep "file*" | wc -l 3 |
もしくは、「ls」コマンドを使う場合は、「-l」オプションを使わずに、ファイル名のみを表示し、単語数でカウントを行います。
1 2 3 4 |
$ ls file_name1 file_name2 file_name3 $ ls | wc -w 3 |
今回の記事では、「wc」コマンドについて解説をしましたが、ファイルの内容、および、テキスト情報についての操作に関連するコマンドは下記の記事にまとめていますので、あわせて参考にしてください。
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
catはLinuxのコマンドで、本来の機能はファイルを連結だが、ファイルの内容を表示する機能のために使うことが多く使用頻度が高い。同種の機能のmore、less、tacコマンドについても解説。
-
UNIX・Linuxの sedコマンドで特定の文字列を置換する方法
UNIX・Linuxのコマンドで特定の文字列を置換する sedコマンドの使い方と、perlコマンドを使っての方法を解説しています。
-
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。
-
Linuxのsplitコマンドは指定したサイズにファイルを分割する
Linuxのsplitコマンドはファイルを分割する機能を有する。分割するサイズ、行数、ファイル数を指定するオプションや、分割後のファイルの接尾辞を指定するオプションなどがある。
-
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
Linuxでファイル、テキストを操作するコマンドのまとめ。cat、less、head、tail、split、tr、sedなど、ファイルを表示、置換、連結、分割などの各コマンドの使い方の紹介と詳細ページの紹介。
-
Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法
Linuxのファイルのタイムスタンプにはmtime、ctime、atimeの3種類がある。その違いを詳細に解説しつつ、lsで表示するオプション、touchで更新するオプションを解説。
-
Linuxのbashのコマンドの履歴をhistoryで確認し!、↓、↑で実行する
Linuxで実行したコマンドの履歴を確認するコマンド「history」。「history」の使い方、設定の変更、設定ファイルの設置場所について解説。「!番号」「!文字列」「!?文字列」など。
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。
-
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。
-
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。