このエントリーをはてなブックマークに追加


固定長文字列データをCSVに変換する・sed

固定長文字列データを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の動作について

今回、指定した値で文字を区切り、カンマを挿入しました。
sedでは、文字数は以下のうに記します。

.\{数字\}

これで、数字文の文字になります。

次に取得した文字を左辺で記すには以下のような約束事があります。

\(条件\)

今回の例では、以下の部分になります。

\(.\{2\}\)\(.\{4\}\)\(.\{6\}\)

括弧()で囲んだ部分を左辺では、\1 \2 \3 と記述します。
1番目は\1、二番目は\2のように記述します。
今回の例では以下の部分になります。

\1,\2,\3,

以上、sedを使って固定長文字列をCSVに変換する方法でした。



添付ファイル: filefixlen.dat 613件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-12-16 (金) 13:00:54