やまものブログ

メモ書きブログです (^_^;A

ファイル行数のみを "wc -l" で取りたければ cat するのが簡単?

ファイルの行数を知るに wc を使っています。
たとえば、a.txt という3行のファイルがあるとします。

a.txt

a
b
c


wc -l を使うと「行数」とともに「ファイル名 (a.txt)」も出力されます。

$ wc -l a.txt
3 a.txt


ここで、シェルスクリプトで行数だけを数字としてとりたい場合を考えます。
明らかに "a.txt" は邪魔です。

この対策として、一度、cat にかませて、その出力をパイプで wc -l に与えます。

$ cat a.txt | wc -l
3


数字だけ取れました (^o^)V

他に考えられる方法としては、cut を使うとか。

$ wc -l a.txt | cut -d " " -f 1
3


awk を使っても数字だけをとりだせます。

$ wc -l a.txt | awk '{print $1}'
3



wc 以外に使うコマンドとして、
 cat, cut, awk のどれがいいですか?
という選択になるわけですが、cat が最も単純だからよいかと思います。

しかし、「単純とは何か?」と考えなおして、実行形式のサイズが小さいことだろうと踏んで、手元のシステム(Ubuntu 16.04.2 LTS)で調べてみました。

$ ls -l /bin/cat /usr/bin/cut /usr/bin/mawk
-rwxr-xr-x 1 root root 52080 2月 18 2016 /bin/cat
-rwxr-xr-x 1 root root 39728 2月 18 2016 /usr/bin/cut
-rwxr-xr-x 1 root root 117768 3月 24 2014 /usr/bin/mawk

(補足) awk はリンクをたどると /usr/bin/mawk が実体でした。


"cut" が最も小さいので、最も単純で良いのだろうか…
素人なのでこれ以上は分かりません m(_ _)m