01 / 06
入口にもつなげる
ここまで出口ばかり見てきたね。今度は入口(標準入力・0 番)だよ。
矢印を逆にするだけ。
wc -l < namae.txt「namae.txt を wc の入口に流しこむ」という意味だよ。矢印の向きが、流れる向きそのままだね。
~ $ wc -l < namae.txt3つなぐ
INPUT · スライド
01 / 06
ここまで出口ばかり見てきたね。今度は入口(標準入力・0 番)だよ。
矢印を逆にするだけ。
wc -l < namae.txt「namae.txt を wc の入口に流しこむ」という意味だよ。矢印の向きが、流れる向きそのままだね。
~ $ wc -l < namae.txt302 / 06
wc -l namae.txt でも同じ数が出るよね。何が違うんだろう。
~ $ wc -l namae.txt3 namae.txt~ $ wc -l < namae.txt3ファイル名が出ないんだ。
理由はこう。ファイル名を渡したときは wc が「自分が開いたファイル」を知っているので、名前を添えてくれる。< のときは流れてきただけなので、wc は名前を知らないんだ。
数だけほしいときは < のほうが扱いやすいよ。あとの計算に使うときに、名前が邪魔にならないからね。
03 / 06
< がどうしても必要な場面があるよ。ファイル名を受け取らない道具を使うときだね。
代表が tr(文字を置きかえる道具)だよ。
tr a-z A-Z namae.txt # ✗ 使い方が出て終わるtr a-z A-Z < namae.txt # ◯tr は「入口から来たものを変えて出口に出す」ことしかしない作りなんだ。だからファイルを読ませたいなら < かパイプで流しこむしかない。
こういう道具はほかにもあるよ。「ファイル名を渡したのに動かない」ときは < を試す——これが覚えてほしい対処法だよ。
04 / 06
cat を1つ減らせるこう書きたくなることがあるよ。
cat namae.txt | wc -l動くけれど、cat は要らないんだ。< で直接つなげるからね。
wc -l < namae.txtプログラムが1つ減るぶん速いし、短い。必要のない cat は、慣れた人が見ると「あ、始めたばかりだな」と分かるところなので、ここで直しておこう。
もちろん cat A B | ... のように2つ以上つなげるなら cat が必要だよ。< は1つしか流せないからね。
05 / 06
< と > は1行に両方書けるよ。
sort < kazu.txt > narabeta.txt「kazu.txt から読んで、並べて、narabeta.txt に書く」だね。コマンドの左右に入口と出口が付いている形になっていて、流れが目で見て分かるのがいいところだよ。
sort kazu.txt > narabeta.txt でも同じ結果になるけれど、< で書くと「このコマンドは読むだけで、元のファイルは触らない」ということが読み手に伝わるよ。
~ $ sort < kazu.txt > narabeta.txt~ $ cat narabeta.txt12306 / 06
namae.txt に3人の名前(小文字)、kazu.txt に3つの数が入っているよ。
この回で新しく出てくる道具を先に紹介しておくね。どれも入口から受け取って出口に出すだけの、素直な道具だよ。
tr … 文字を置きかえる・消すrev … 1行ずつ左右をひっくり返す次の章で本格的に扱う道具の顔見せでもあるよ。