|wcが3つの単一行ファイルを含むdirに3つの行を出力するのはなぜですか? [閉鎖]

|wcが3つの単一行ファイルを含むdirに3つの行を出力するのはなぜですか? [閉鎖]
$ ls
1.txt   2.txt   3.txt
$ ls | wc
       3       3      18

3つのファイルすべてが1行しかありませんが、ls | wcは "3"を印刷します。

答え1

ls | catパイプで接続するときと端末に送信するときにlsの出力形式がどのように異なるかを確認してください。

答え2

ls、端末以外のデバイスに出力するときはls -1(「ell」ではなく数字である1)ように動作し、各名前を新しい行に出力します。

lsパイプで接続されていない場合、出力の行数を計算したい場合に使用しますls -C。出力がどこに向かっても、複数の熱出力を強制できます-Cls

つまり、

ls -C | wc

または行数を取得するには

ls -C | wc -l

一方、3つのファイルの行数を別々に数えるには、次のようにします。

wc -l -- *

各ファイルに1行しか含まれていない場合、結果は次のようになります。

   1 1.txt
   1 2.txt
   1 3.txt
   3 total

つまり、各ファイルには1行が含まれており、3つのファイルの合計行数は3つです。

これ違いwc -l -- *ls -C | wc -lまたはls | wcあなたが書いたように)の間でwc入力を取得します。

そしてls -C | wc -lwc次から読む出力lsしたがって、コマンドによって生成された行数が計算されますls。すべてのファイルの行数ではありません。

それで私たちは読書をwc -l -- *言うwc特定のファイル。この場合、ファイルはワイルドカード(「ファイル名ワイルドカードパターン」)*拡張名に対応します。

wc -l -- *wc -l -- 1.txt 2.txt 3.txtこれはディレクトリ内のこれらのファイルにのみ当てはまります。

-引数が意味としてwc解釈されるため、現在ディレクトリにあるファイルを呼び出すと正しく機能しません。-標準入力。この問題を解決する 1 つの方法は、wc -l ./*代わりに使用することです (./-場合は特別ではありませんwc)。ただし、これは./プレフィックスが出力にも表示されることを意味しますwc

答え3

ls単一の行とは異なる3つの列が用意されているため、wc各列の終わりに新しい行が計算されます。つまり、ls見えなくても書式設定されたテキストを出力します。しかしwc、それは。

関連情報