固定長文字列データをCSVに変換する・sed †固定長文字列データをcsvに変換したい場合は、sedを使用すると簡単に実現することができます。 関連資料 †使用した固定長文字列データ †以下に記す固定長の文字列データを使用しました。 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,\2,\3, 以上、sedを使って固定長文字列をCSVに変換する方法でした。 |