01 / 08
この章は「つなぐ相手」を増やす回
前の章でパイプを覚えたね。つなぎ方は分かったので、つなぐ相手を増やしていくよ。
この章の道具はどれも同じ形をしているよ。
テキストを受け取って、加工して、テキストを返す
だから全部パイプでつながるんだ。並べる道具、重なりを消す道具、列を抜く道具……それを組み合わせると、表計算ソフトでやるような集計が1行で書けるようになるよ。
最初は sort。並べかえる道具だよ。
テキストを整形する
INPUT · スライド
01 / 08
前の章でパイプを覚えたね。つなぎ方は分かったので、つなぐ相手を増やしていくよ。
この章の道具はどれも同じ形をしているよ。
テキストを受け取って、加工して、テキストを返す
だから全部パイプでつながるんだ。並べる道具、重なりを消す道具、列を抜く道具……それを組み合わせると、表計算ソフトでやるような集計が1行で書けるようになるよ。
最初は sort。並べかえる道具だよ。
02 / 08
使い方はいちばん簡単な形だよ。
```
sort namae.txt
```
これで行がアルファベット順に並ぶ。元のファイルは変わらないよ。並べた結果を出すだけだね。
残したいなら > を足す。前の章でやったとおりだよ。
```
sort namae.txt > narabeta.txt
```
~ $ sort namae.txtsatosuzukitanaka03 / 08
ここでいちばん大事な落とし穴を先に見せるよ。数を sort すると変な順になるんだ。
```
~ $ sort tensuu.txt
100
25
3
9
```
100 がいちばん上、3 が 9 より先。おかしいよね。
理由は sort が文字として比べているからだよ。1文字目を見て 1 < 2 < 3 < 9 の順に並べている。100 の 1 と 25 の 2 を比べているだけなんだ。
電話帳と同じ考え方だね。「あきら」より「あい」が先に来るのと同じ理屈だよ。
04 / 08
数として並べたいときは -n を付けるよ(number の n)。
```
~ $ sort -n tensuu.txt
3
9
25
100
```
これで思った通りになったね。
数が入っているものを並べるときは -n。これは忘れると必ず間違うので、体で覚えてしまおう。ログの集計で sort -rn を使ったのを覚えているかな。あの n がこれだよ。
05 / 08
表のようなデータでは、何列目で並べるかを決めたいよね。
```
sort -t, -k2 -n seiseki.csv
```
-t, … 区切りは ,(カンマ)-k2 … 2列目を見て並べる-n … 数としてseiseki.csv は 名前,点数 の形なので、これで点数順に並ぶんだ。
-t を書かないと、区切りは空白になるよ。空白区切りのデータなら -k2 だけでいいんだ。
~ $ sort -t, -k2 -n seiseki.csvsato,72tanaka,80kimura,95suzuki,9506 / 08
-u(unique)を付けると、同じ行を1つにまとめて並べてくれるよ。
```
sort -u kudamono.txt
```
次のレッスンでやる uniq と同じことができるけれど、sort -u は1つで済むので短いよ。
ただし uniq にしかできないこともあるんだ(個数を数える -c など)。だから両方覚えるよ。
07 / 08
sort は既定では大文字を小文字より先に並べるよ。Apple → Banana → apple の順だね。
意外に感じるけれど、これは文字コードの番号順に並べているからだよ。コンピュータの中では A(65) が a(97) より小さいんだ。
人が期待する順(Apple・apple・Banana)にしたいときは -f を付けるよ(fold = 大小を畳む)。
人向けの一覧を作るときは -f。覚えておくと親切な出力が作れるよ。
08 / 08
ファイルは5つあるよ。
namae.txt … 名前が3行tensuu.txt … 100 9 25 3 の4行seiseki.csv … 名前,点数 が4行kudamono.txt … 果物が6行(重なりあり)oomoji.txt … Apple apple Bananaこの回では並んだ順を確かめるために、| head -1(いちばん上)や | tail -1(いちばん下)をよく使うよ。並びが正しいかは、端を見るのがいちばん早いんだ。