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列目の値ごとにファイルを振り分けている。