01 / 06
今度は「横」につなぐ
ここまでの道具を思い出してみて。
grep… 要る行を選ぶ(横に切る)cut… 要る列を抜く(縦に切る)sort・uniq… 行を並べかえる、まとめる
どれも減らす・並べかえる道具だったね。
この回は逆向きだよ。別々のファイルを横につなぐ paste と、行番号を足す nl を扱うんだ。減らすのではなく、増やす向きの道具だよ。
テキストを整形する
INPUT · スライド
01 / 06
ここまでの道具を思い出してみて。
grep … 要る行を選ぶ(横に切る)cut … 要る列を抜く(縦に切る)sort・uniq … 行を並べかえる、まとめるどれも減らす・並べかえる道具だったね。
この回は逆向きだよ。別々のファイルを横につなぐ paste と、行番号を足す nl を扱うんだ。減らすのではなく、増やす向きの道具だよ。
02 / 06
paste は2つ以上のファイルを、同じ行番号どうしで横に並べるよ。
```
~ $ paste namae.txt tensuu.txt
tanaka 80
suzuki 95
sato 72
```
名前のファイルと点数のファイルが、1行ずつ組になったね。
区切りはタブが既定だよ。-d で変えられるので、CSV を作りたいならこうだね。
```
paste -d, namae.txt tensuu.txt
```
cat namae.txt tensuu.txt だと縦に6行つながってしまうのを思い出して。cat は縦、paste は横だよ。
~ $ paste -d, namae.txt tensuu.txttanaka,80suzuki,95sato,7203 / 06
-s(serial)を付けると、1つのファイルの全部の行を1行にまとめるよ。
```
~ $ paste -s -d, namae.txt
tanaka,suzuki,sato
```
縦に並んでいたものが横1行になったね。
前のレッスンで tr を使って「横のものを縦にした」よね。paste -s はその逆向きだよ。
| やりたいこと | 道具 |
| --- | --- |
| 横 → 縦 | tr ' ' '\n' |
| 縦 → 横 | paste -s -d' ' |
この2つを覚えておくと、データの向きを自由に変えられるようになるよ。
04 / 06
nl(number lines)は各行の頭に行番号を付けるよ。
```
nl namae.txt
```
番号の幅や区切りは変えられるよ。既定だと右そろえで見にくいので、こう書くと読みやすいんだ。
```
nl -w1 -s': ' namae.txt
```
-w1 … 番号の幅を1桁分に(余分な空白を入れない)-s': ' … 番号のあとに : を置く他にも -v10 で10番から始めたり、-i5 で5ずつ増やしたりできるよ。
~ $ nl -w1 -s': ' namae.txt1: tanaka2: suzuki3: sato05 / 06
行番号を振る方法はもう1つあるよ。cat -n だね。でも結果が違うんだ。
kara.txt は aaa・空行・bbb の3行だよ。
```
~ $ nl kara.txt
1 aaa
2 bbb
~ $ cat -n kara.txt
1 aaa
2
3 bbb
```
nl は空行を数えないんだ。cat -n は数えるよ。
どちらが欲しいかは場面によるね。
nlcat -nnl -ba と書けば nl でも空行を数えるようになるよ(b は body、a は all だね)。
06 / 06
ファイルは3つだよ。
namae.txt … tanaka・suzuki・satotensuu.txt … 80・95・72kara.txt … aaa・空行・bbbnamae.txt と tensuu.txt は行の順番が対応しているよ。1行目どうし(tanaka と 80)が組だね。
paste は行の順番だけを見て組にするので、順番が合っていないと間違った組ができる。使う前に両方のファイルを cat で見て、順番が合っているか確かめる癖をつけてね。