2009年2月14日

awkでひとつのファイルから沢山のファイルを切り出す

開発ネタ。

csvファイルなどあらかじめ定型化されているファイルから、1行ごとに個別ファイルへ分割したい場合、awkを知っているとサクっとできてしまう。

大元のcsvファイルの各行1フィールド目に、分割後のファイル名が記載されているものとして、、


# コマンド
awk -F\, -f split.awk org.csv

# split.awk
{
filename=$1
print > filename
close(filename)
}

# org.csv --- 1フィールド目が切出し後のファイル名
0.csv,"^@",200,1.00,1000.00,"0, 200 1 1000;"
1.csv,"^@",400,512.00,10.00,"1, 400 512 10;"
2.csv,"^A",1600,2.00,10.00,"2, 1600 2 10;"
・・・



あとは書き出したファイルを対象に、sedなどの文字列置換で1フィールド目を取り除いてやればOK。

参考: sed&awkプログラミング