つなぐ

INPUT · スライド

ファイルを流しこむ(`<`)

01 / 06

入口にもつなげる

ここまで出口ばかり見てきたね。今度は入口(標準入力・0 番)だよ。

矢印を逆にするだけ。

```
wc -l < namae.txt
```

namae.txtwc の入口に流しこむ」という意味だよ。矢印の向きが、流れる向きそのままだね。

~ $ wc -l < namae.txt3

02 / 06

ファイル名を書くのと何が違う

wc -l namae.txt でも同じ数が出るよね。何が違うんだろう。

```
~ $ wc -l namae.txt
3 namae.txt
~ $ wc -l < namae.txt
3
```

ファイル名が出ないんだ。

理由はこう。ファイル名を渡したときは 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.txt123

06 / 06

さあ、打ってみよう

namae.txt に3人の名前(小文字)、kazu.txt に3つの数が入っているよ。

この回で新しく出てくる道具を先に紹介しておくね。どれも入口から受け取って出口に出すだけの、素直な道具だよ。

  • tr … 文字を置きかえる・消す
  • rev … 1行ずつ左右をひっくり返す

次の章で本格的に扱う道具の顔見せでもあるよ。