01 / 06
行の「一部」だけが欲しい
前のレッスンで、ログの住所を数えたよね。でもあれは住所だけが並んだファイルだった。本物のログは1行が長いんだ。
```
192.168.0.1 - - [21/Aug/2026] "GET /index.html" 200
```
この中の住所だけを数えたいとき、行ごと渡しても意味が無い。行が全部違うから、uniq -c は全部「1回」と答えてしまうんだ。
必要な列だけを抜き出す道具が要る。それが cut だよ。
テキストを整形する
INPUT · スライド
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.csvtanakasuzukisato03 / 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
この道具にはできないことが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.txt … abcdefghij など10文字の行が2つsukima.txt … tanaka 80(空白3つ)と suzuki 95(空白1つ)sukima.txt はわざと崩れているデータだよ。うまくいかないのを見るために置いてあるんだ。失敗も1回やっておくと、あとで同じ場面に出会ったときに気づけるからね。