ファイル内の行数、ワード数、バイト数を数えるのは便利ですが、Linux
wc
コマンドの本当の柔軟性は、他のコマンドと連携することで生まれます。見てみましょう。
トイレコマンドとは何ですか?
wc
コマンドは小さなアプリケーションです。これはコア Linux ユーティリティの 1 つであるため、インストールする必要はありません。 Linux コンピュータにはすでにインストールされています。
それが何をするのかをほんの少しの言葉で説明できます。ファイルまたは選択したファイル内の行、単語、バイトをカウントし、結果をターミナル ウィンドウに出力します。また、STDIN ストリームから入力を取得することもできます。つまり、処理するテキストを
パイプ
で渡すことができます。ここから、
wc
実際に価値を付加し始めるのです。
これは、「1 つのことを実行し、それをうまく実行する」という Linux のマントラの好例です。パイプ入力を受け入れるため、複数のコマンドの呪文で使用できます。これから見ていきますが、この小さなスタンドアロン ユーティリティは、実際には優れたチームプレイヤーとして機能します。
私が
wc
を使用する方法の 1 つは、作成中の複雑なコマンドまたは
エイリアスの
プレースホルダーとして使用することです。完成したコマンドが破壊的でファイルを削除する可能性がある場合、私は実際の危険なコマンドの代用として
wc
をよく使用します。
こうすることで、コマンドの開発中に、各ファイルが期待どおりに処理されているという視覚的なフィードバックを得ることができます。構文と格闘している間に何か悪いことが起こる可能性はありません。
wc
はシンプルですが、知っておく必要がある小さな癖がいくつかあります。
トイレの始め方
wc
を使用する最も簡単な方法は、コマンド ラインでテキスト ファイルの名前を渡すことです。
トイレ lorem.txt
これにより、
wc
ファイルをスキャンして行、単語、バイトをカウントし、それらを端末ウィンドウに書き込みます。
単語は空白で囲まれたものとみなされます。それが実際の言語からの単語であるかどうかは関係ありません。ファイルに「frd g lkj」のみが含まれている場合でも、3 ワードとしてカウントされます。
行は、復帰またはファイルの終わりで終了する一連の文字です。エディター内で行が折り返されても、ターミナル ウィンドウ内で行が折り返されても、
wc
キャリッジ リターンまたはファイルの終わりに到達するまでは、同じ行のままです。
最初の例では、ファイル全体で 1 行が見つかりました。 「lorem.txt」ファイルの内容は次のとおりです。
猫のロレム.txt
復帰がないため、これらはすべて 1 行としてカウントされます。これを別のファイル「lorem2.txt」と比較し、
wc
それをどのように解釈するかを比較してください。
トイレ lorem2.txt
猫のlorem2.txt
今回は、特定の位置で新しい行を開始するためにテキストにキャリッジ リターンが挿入されているため、
wc
15 行をカウントします。ただし、テキストが含まれる行を数えてみると、12 行しかないことがわかります。
他の 3 行はファイルの終わりにある空行です。これらにはキャリッジリターンのみが含まれます。これらの行にはテキストがなくても、新しい行が開始されているため、
wc
それらをそのようにカウントします。
好きなだけファイルを
wc
に渡すことができます。
トイレ lorem.txt lorem2.txt
個々のファイルの統計とすべてのファイルの合計を取得します。
ワイルドカードを使用して、明示的に名前を付けたファイルの代わりに一致するファイルを選択することもできます。
トイレ *.txt *.?
コマンドラインオプション
デフォルトでは、
wc
各ファイル内の行、単語、およびバイトを表示します。これは、
-l
(行)
-w
(ワード) および
-c
(バイト) オプションを使用するのと同じです。
トイレ lorem.txt
wc -l -w -c lorem.txt
表示したい数値の組み合わせを指定できます。
wc -l lorem.txt
トイレ -w lorem.txt
トイレ -C lorem.txt
wc -l -c lorem.txt
-c
(バイト) オプションによって生成される最後の図には特別な注意を払う必要があります。多くの人がこれを文字数を数えるのと間違えています。実際にバイトをカウントします。文字数とバイト数は同じである可能性があります。しかしいつもではない。
「unicode.txt」というファイルの内容を見てみましょう。
猫のユニコード.txt
3 つの単語と非ラテン文字のアルファベットが含まれています。
wc
デフォルト設定のバイト数でファイルを処理させ、それを再度実行しますが、
-m
(characters) オプションを使用して文字を要求します。
トイレユニコード.txt
wc -l -w -m unicode.txt
文字数よりもバイト数の方が多くなります。
ファイルの 16 進ダンプを見て、何が起こっているのかを見てみましょう。
hexdump
コマンドの
-C
(標準) オプションは、ファイル内のバイトを 16 行で表示し、行末にプレーン ASCII 相当物 (存在する場合) を表示します。対応する ASCII 文字がない場合は、代わりにピリオド「
.
」が表示されます。
hexdump -C unicode.txt
ASCII では、16 進値
0x20
はスペース文字を表します。左から 3 つの値を数えると、次の値がスペース文字であることがわかります。したがって、最初の 3 つの値
0x62
、
0x6f
、および
0x79
、「boy」の文字を表します。
0x20
を飛び越えると、3 つの 16 進値の別のセット、
0x63
、
0x61
、および
0x74
が表示されます。これらは「猫」と綴ります。次のスペース文字に飛び移ると、「dog」の文字の値がさらに 3 つ表示されます。これらは
0x64
、
0x5f
、および
0x67
です。
「dog」という単語のすぐ後ろに、スペース文字
0x20
と、さらに 5 つの 16 進数値が表示されます。最後の 2 つは改行、
0x0a
です。
残りの 3 バイトは非ラテン文字を表し、緑色で示しています。これは Unicode 文字であり、エンコードするには 3 バイト必要です。これらは
0xe1
、
0xaf
、および
0x8a
です。
したがって、何をカウントしているのかを理解し、バイトと文字が同じである必要はないことを確認してください。通常、バイトをカウントするとファイルの実際の内容がわかるため、より便利です。文字ごとにカウントすると、ファイルの内容によって表されるものの数がわかります。
ファイルからファイル名を取得する
wc
にファイル名を指定する別の方法があります。ファイル名を
file
に入れて、そのファイルの名前を
wc
に渡すことができます。ファイルを開いてファイル名を抽出し、コマンド ラインで渡されたかのように処理します。これにより、ファイル名の任意のコレクションを保存して再利用できるようになります。
しかし、そこには落とし穴があり、それは大きな問題です。ファイル名は改行で終わるのではなく、ヌルで終わる必要があります。つまり、各ファイル名の後に、通常のキャリッジ リターン バイト
0x0a
の代わりに、ヌル バイト
0x00
が存在する必要があります。
エディタを開いてこの形式でファイルを作成することはできません。通常、このようなファイルは他のプログラムによって生成されます。ただし、そのようなファイルがある場合は、次のように使用します。
ファイル名を含むファイルは次のとおりです。
less
で開くと、
less
が null バイトを示すために使用する奇妙な「
^@
」文字が表示されます。
ソースファイルリスト.txt を少なくする
wc
でファイルを使用するには、
--files0-from
(入力の読み取り元) オプションを使用し、ファイル名を含むファイルの名前を渡す必要があります。
wc ---files0-from=source-files-list.txt
ファイルは、コマンド ラインで提供された場合とまったく同じように処理されます。
トイレへの入力を配管する
入力を
wc
に送信する、より一般的で柔軟かつ生産的な方法は、他のコマンドからの出力を
wc
にパイプすることです。これは
、
echo
コマンド
を使用して実証できます。
エコー「これを数えてください」 | エコートイレ
echo -e "これを\nカウントしてください" |トイレ
2 番目の
echo
コマンドは、
-e
(エスケープ文字) オプションを使用して、「
\n
」改行フォーマット コードのようなエスケープされたシーケンスを許可します。これにより新しい行が挿入され、
wc
入力を 2 行として認識します。
これは、入力を一方から他方に供給するコマンドのカスケードです。
./* -type f | を見つけます。回転 |カット -d'。 -f1 |回転 |並べ替え |ユニークな
-
find は
、現在のディレクトリから開始してファイル (
type -f) を再帰的に検索します。revファイル名を逆にします 。 -
Cut は
、フィールド区切り文字をピリオド「
.」に定義し、反転されたファイル名の「前」から最初に見つかったピリオドまでを読み取ることにより、最初のフィールド (-f1) を抽出します。これでファイル拡張子が抽出されました。 - rev は 、抽出された最初のフィールドを反転します。
- sort はアルファベットの昇順で並べ替えます。
- uniq は、 端末ウィンドウに一意のエントリをリストします。
このコマンドは、現在のディレクトリとサブディレクトリにあるすべての一意のファイル拡張子を一覧表示します。
uniq
コマンドに
-c
(カウント) オプションを追加すると、各拡張子の種類の出現数がカウントされます。ただし、異なる一意のファイル拡張子がいくつあるかを知りたい場合は、行の最後のコマンドとして
wc
を削除し、
-l
(行) オプションを使用できます。
./* -type f | を見つけます。回転 |カット -d'。 -f1 |回転 |並べ替え |ユニーク |トイレ -l
そして最後に
これが
wc
あなたのためにできる最後のトリックです。ファイル内の最長の行の長さがわかります。残念ながら、それがどの行であるかはわかりません。それだけで長さが得られます。
トイレ -L taf.c
ただし、タブは 8 つのスペースとしてカウントされることに注意してください。エディタで見ると、その行の先頭に 2 つのスペースのタブが 3 つあります。実際の長さは 124 文字です。したがって、報告されている数字は人為的に拡大されています。
私ならこの機能には少し塩を加えて扱います。つまり、それを使用しないでください。その出力は誤解を招きます。
その癖はありますが、
wc
、ファイル内の単語だけでなく、あらゆる種類の値をカウントする必要がある場合に、パイプされたコマンドにドロップする優れたツールです。





