テキストを整形する

INPUT · スライド

列を抜き出す(`cut`)

01 / 06

行の「一部」だけが欲しい

前のレッスンで、ログの住所を数えたよね。でもあれは住所だけが並んだファイルだった。本物のログは1行が長いんだ。

```
192.168.0.1 - - [21/Aug/2026] "GET /index.html" 200
```

この中の住所だけを数えたいとき、行ごと渡しても意味が無い。行が全部違うから、uniq -c は全部「1回」と答えてしまうんだ。

必要な列だけを抜き出す道具が要る。それが cut だよ。

02 / 06

区切りと列の番号を指定する

cut には2つのことを伝えるよ。

  • -d区切り文字(delimiter)は何か
  • -f何列目(field)が欲しいか

```
cut -d, -f1 seiseki.csv
```

「カンマで区切って、1列目をくれ」という意味だね。

-d を書かないとタブが区切りになるよ。タブ区切りのファイルなら -f だけでいいんだ。

~ $ cut -d, -f1 seiseki.csvtanakasuzukisato

03 / 06

複数の列、範囲の指定

列は1つだけでなく、まとめて指定できるよ。

| 書き方 | 意味 |
| --- | --- |
| -f1 | 1列目 |
| -f1,3 | 1列目と3列目 |
| -f2- | 2列目から最後まで |
| -f1-3 | 1列目から3列目 |

複数の列を抜いたときは、区切り文字もそのまま残るよ。cut -d, -f1,3 なら tanaka,3 のようにカンマ付きで出てくるんだ。

04 / 06

文字数で切ることもできる

区切り文字が無いデータでは、-c(character)で何文字目かを指定できるよ。

```
cut -c1-3 moji.txt # 1〜3文字目
cut -c5 moji.txt # 5文字目だけ
cut -c3- moji.txt # 3文字目から最後まで
```

決まった桁数で並んでいるデータ(固定長というよ)に使うんだ。銀行や役所のデータでいまも見かける形だよ。

日本語の文字には注意してね。-c は文字を数えるけれど、-b はバイトを数えるので、日本語だと途中で切れて壊れることがあるよ。

05 / 06

`cut` の限界を知っておく

この道具にはできないことが2つあって、知らないとハマるよ。

1. 列の順番を入れかえられない

```
~ $ cut -d, -f3,1 seiseki.csv
tanaka,3
```

-f3,1 と書いても 3,1 の順にはならず、必ず小さい番号から出てくるんだ。

2. 空白の幅がそろっていないと崩れる

tanaka 80 のように空白が3つ並んでいると、-d" " では「1列目 = tanaka、2列目 = 空、3列目 = 空…」と数えられてしまう。区切りが1文字ずつ数えられるからだよ。

この2つが必要になったら awk を使うよ。この章の後半で出てくるからね。

06 / 06

さあ、打ってみよう

ファイルは4つだよ。

  • seiseki.csv名前,点数,順位 が3行
  • pw.txt/etc/passwd と同じ形(: 区切り、7列)
  • moji.txtabcdefghij など10文字の行が2つ
  • sukima.txttanaka 80(空白3つ)と suzuki 95(空白1つ)

sukima.txtわざと崩れているデータだよ。うまくいかないのを見るために置いてあるんだ。失敗も1回やっておくと、あとで同じ場面に出会ったときに気づけるからね。