著者:湯本豊
今回は、固定長ファイルの変換について説明します。
記事本文掲載のシェルスクリプトマガジンvol.50は以下リンク先でご購入できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#!/bin/bash # プログラム名 :固定長ファイル変換(フィールド型→固定長) # 概要 :フィールド型のファイルを固定長に変換する # 備考(Usage) :TRANS.TO_KOTEICHO [ファイル名] # 作成日 :20xx/xx/xx # 会社名 :Usp-lab # 作成者 :xxx 8#/////////////////////////////////////////////////////////////////////////////// # 初期設定 #/////////////////////////////////////////////////////////////////////////////// #<中略> #------------------------------------------------------------------------------- # 変数の定義 #------------------------------------------------------------------------------- home=~ tmp=/tmp/$$-$(basename $0)_$(date +%Y%m%d%H%M%S) # 一時ファイル # 引数の確認 [ $# -ne 1 ] && exit 1 #/////////////////////////////////////////////////////////////////////////////// # 処理部 #/////////////////////////////////////////////////////////////////////////////// # 引数よりファイル名取得 filename=$1 # 固定長ファイルフォーマット # 1:項目名 2:開始位置 3:終了位置 4:桁数 5:種別(C:コード/T:文字/N:数値) # 商品コード 1 10 10 C # 商品名 11 30 20 T # 単価 31 40 10 N # 数値データの前を0で埋める maezero 3.10 $filename | # 文字データの後ろをアンダーバーで埋める awk '{$2=$2"____________________";print}' | self 1 2.1.20 3 | # データを固定長に連結 tr -d " " | # アンダーバーを半角スペース変換 tr "_" " " | # 文字コード変換(UTF-8→SJIS) uconv -utos > $tmp-data # 結果を標準出力 cat $tmp-data #/////////////////////////////////////////////////////////////////////////////// # 終了 #/////////////////////////////////////////////////////////////////////////////// rm -rf ${tmp}-* exit 0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#!/bin/bash # プログラム名 :固定長ファイル変換(固定長→フィールド型) # 概要 :固定長のファイルをフィールド型に変換する # 備考(Usage) :TRANS.FROM_KOTEICHO [ファイル名] # 作成日 :20xx/xx/xx # 会社名 :Usp-lab # 作成者 :xxx #/////////////////////////////////////////////////////////////////////////////// # 初期設定 #/////////////////////////////////////////////////////////////////////////////// #<中略> #------------------------------------------------------------------------------- # 変数の定義 #------------------------------------------------------------------------------- home=~ tmp=/tmp/$$-$(basename $0)_$(date +%Y%m%d%H%M%S) # 一時ファイル # 引数の確認 [ $# -ne 1 ] && exit 1 #/////////////////////////////////////////////////////////////////////////////// # 処理部 #/////////////////////////////////////////////////////////////////////////////// # 引数よりファイル名取得 filename=$1 # 固定長ファイルフォーマット # 1:項目名 2:開始位置 3:終了位置 4:桁数 5:種別(C:コード/T:文字/N:数値) # 商品コード 1 10 10 C # 商品名 11 30 20 T # 単価 31 40 10 N # 文字コード変換(SJIS→UTF-8) uconv -stou $filename | # 半角スペースをアンダーバーに変換 tr " " "_" | # 固定長ファイルを分割 self 1.1.10 1.11.20 1.31.10 | # アンダーバーを削除 unsco | # 単価の前0を削除 1bai 3 > $tmp-data # 結果を標準出力 cat $tmp-data #/////////////////////////////////////////////////////////////////////////////// # 終了 #/////////////////////////////////////////////////////////////////////////////// rm -rf ${tmp}-* exit 0 |