01 / 07
ファイルを経由しないでつなぐ
ここまでのやり方だと、2つの道具を組み合わせるにはファイルが要ったよね。
```
sort kudamono.txt > temp.txt
uniq temp.txt
rm temp.txt
```
いちいち置き場を作って、使って、片づける。面倒だし、名前を考えるのも無駄だよ。
パイプ(|)を使えば、ファイルを作らずに直接つなげるんだ。
```
sort kudamono.txt | uniq
```
つなぐ
INPUT · スライド
01 / 07
ここまでのやり方だと、2つの道具を組み合わせるにはファイルが要ったよね。
```
sort kudamono.txt > temp.txt
uniq temp.txt
rm temp.txt
```
いちいち置き場を作って、使って、片づける。面倒だし、名前を考えるのも無駄だよ。
パイプ(|)を使えば、ファイルを作らずに直接つなげるんだ。
```
sort kudamono.txt | uniq
```
02 / 07
| は「左の出口を、右の入口につなぐ」という記号だよ。
```
コマンドA | コマンドB
```
直接つながるんだ。途中でディスクに書かれないので速いし、途中の名前を考えなくていい。
そして何段でもつなげるよ。3段でも5段でも同じ書き方だよ。
~ $ ls | wc -l403 / 07
前のレッスンで見たことをもう一度。エラー(2 番)はパイプを通らないよ。
```
ls nai.txt | wc -l # 0(エラーは通っていない)
ls nai.txt 2>&1 | wc -l # 1(合流させたので通る)
```
これは親切な作りなんだ。パイプの途中でエラーが混ざると、次の道具が変な文字を受け取って誤動作するからね。異常は人の目に、データは次の道具へという筋が通っているんだ。
04 / 07
いちばんよく使われる形を覚えてしまおう。「同じものがいくつあるか、多い順に」だよ。
```
sort kudamono.txt | uniq -c | sort -rn
```
1段ずつ読むとこうだよ。
1. sort … 同じものを隣どうしに集める
2. uniq -c … 隣の重なりをまとめて、頭に個数を書く
3. sort -rn … その数で大きい順(r は逆順、n は数として)
ログの集計はほぼこの形だよ。「どのエラーがいちばん多いか」「どの住所からいちばん来ているか」が、これで出るんだ。
~ $ sort kudamono.txt | uniq -c | sort -rn 3 ringo 2 mikan 1 banana05 / 07
長いパイプを一度に書こうとしなくていいよ。1段書いて、打って、目で見る。それを繰り返すんだ。
```
sort kudamono.txt # まず並ぶか見る
sort kudamono.txt | uniq -c # 数が付くか見る
sort kudamono.txt | uniq -c | sort -rn # 並び替わるか見る
```
この作り方には大きな利点があるよ。どこで思った通りにならなかったかが分かるんだ。
5段いっぺんに書いて結果が変だと、どの段が悪いのか分からない。1段ずつなら、直前に足した段が犯人だよ。
06 / 07
面白い実験をしてみよう。
```
yes | head -3
```
yes は y を無限に出し続けるコマンドだよ。でもこれは止まる。
head -3 が3行受け取って終わると、書き先が閉じたことが yes に伝わって、yes も終わるんだ。
この仕組みのおかげで、巨大なログ | head のような形が安全に使えるよ。全部読み終わるのを待たなくていいんだ。
07 / 07
kudamono.txt に果物の名前が6行入っているよ。ringo が3つ、mikan が2つ、banana が1つだね。
この回では同じファイルを何度も使うよ。つなぐ段を増やしていくと、出てくるものがどう変わるかを見てほしいんだ。
新しい道具も少し出てくるよ。uniq(重なりをまとめる)、seq(数を並べる)、ps(動いているものを見る)。どれも次の章以降でくわしくやるので、ここではつなぐ相手として顔を見るだけでいいよ。