読者です 読者をやめる 読者になる 読者になる

awkでテキストファイルを分割する

awkを使って、テキストファイルを1行ずつ任意の数のファイルに振り分けたい。

例えば

$ cat target
1 0000007 セロリ 20060201 117
2 0000007 セロリ 20060202 136
3 0000007 セロリ 20060203 221
4 0000017 練馬大根 20060201 31
5 0000017 練馬大根 20060202 127
6 0000017 練馬大根 20060203 514
7 0000021 温州みかん 20060201 90
8 0000021 温州みかん 20060202 324
9 0000021 温州みかん 20060203 573
10 0000025 プリンスメロン 20060203 391
11 0000030 じゃが芋 20060202 541
12 0000030 じゃが芋 20060203 184

のようなファイルを4つのファイルに分割したい場合は、awkを使って

$ cat target | awk '{ fn=sprintf("target.%d",NR%4); print $0 >> fn }'

こんな具合に書ける。
この場合、「target.番号」というファイルに1行ずつ順番に振り分けていく。
振り分けるファイルの数を変えたい場合は「NR%4」の部分を変えればよい。

特定の列の値ごとに分割する場合は、同じように

$ cat target | awk '{ fn=sprintf("target.%s",$2); print $0 >> fn }'

とすればよい。この場合は2列目の値ごとにファイルを振り分けている。