固定長文字列データをcsvに変換したい場合は、sedを使用すると簡単に実現することができます。
尚、本資料の例では、対象データが固定長で1レコード毎に改行があることを想定しています。
以下に記す固定長の文字列データを使用しました。
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890
以下の例では、2、4、6と残りで区切りCSVとして出力する例です。
$ cat fixlen.dat | sed -e 's/^\(.\{2\}\)\(.\{4\}\)\(.\{6\}\)/\1,\2,\3,/g' 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890 12,3456,789012,345678901234567890
タブ区切りにしたい場合は以下のようになります。
$ cat fixlen.dat | sed -e 's/^\(.\{2\}\)\(.\{4\}\)\(.\{6\}\)/\1\t\2\t\3\t/g' 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890 12 3456 789012 345678901234567890
ダブルクォートで囲みたい場合は、以下のようになります。
cat fixlen.dat | sed -e 's/^\(.\{2\}\)\(.\{4\}\)\(.\{6\}\)/"\1","\2","\3","/g' | sed -e 's/$/"/g' "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890" "12","3456","789012","345678901234567890"
今回、指定した値で文字を区切り、カンマを挿入しました。
sedでは、文字数は以下のうに記します。
.\{数字\}
これで、数字文の文字になります。
次に取得した文字を左辺で記すには以下のような約束事があります。
\(条件\)
今回の例では、以下の部分になります。
\(.\{2\}\)\(.\{4\}\)\(.\{6\}\)
括弧()で囲んだ部分を左辺では、\1 \2 \3 と記述します。
1番目は\1、二番目は\2のように記述します。
今回の例では以下の部分になります。
\1,\2,\3,
以上、sedを使って固定長文字列をCSVに変換する方法でした。