ユニケージしてみた。(その4:LV3MAKE編)
ユニケージしてみた。(その4:LV3MAKE編)
「すごいですね、やってることばかですけど」は最高の褒め言葉
Input(LV2データ)
前回のLV2MAKEで作成されたフォーマットされたデータ
mba:YOKIN 7010oncajon$ cat DATA/LV2/YOKIN/20870301_20870331 20870301 60000 _ カード_ENET000000 500000 20870307 30000 _ カード_ENET000001 470000 20870316 5000 _ 電気料 465000 20870319 _ 200000 給料振込_会社名 665000 20870327 3000 _ ガスダイ3ガツ 662000 20870328 1000 _ ゲスイドウ_シヨウリヨウ 661000 20870328 _ 9000 交通費振込_会社名 670000
Process(LV3MAKE)
正規化された月別のデータを作成する。ポイントは以下。
- LV2データの重複を除外する
- 年月単位でファイルを分割する。ユニケージコマンドの
keycut
が便利
mba:YOKIN 7010oncajon$ cat SHELL/LV3MAKE.YOKIN #!/bin/bash -vx # # LV3MAKE.YOKIN 預金データのLV3MAKE # # usage: LV3MAKE.YOKIN # # writen by 7010onCajon / Date: 20140709 # ホームディレクトリ homed=/Users/7010oncajon/Documents/Programing/UNICAGE/YOKIN # ログディレクトリ logd=${homed}/LOG mkdir -p ${logd} logf=${logd}/LOG.$(basename $0).$(date +%Y%m%d) exec 2> ${logf} # tmpディレクトリ tmpd=${homed}/TMP mkdir -p ${tmpd} tmp=${tmpd}/$$.$(basename $0).$(date +%Y%m%d).$(date +%H%M%S) # LV2データディレクトリ lv2d=${homed}/DATA/LV2/YOKIN mkdir -p ${lv2d} # LV3データディレクトリ lv3d=${homed}/DATA/LV3/YOKIN mkdir -p ${lv3d} # エラー処理 ERROR_EXIT(){ echo ERROR__ $(basename $0) rm -f ${tmp}-* exit 1 } # LV2データの読み込み tgt_file=${lv2d}/????????_???????? # 1:年月日 2:お引出し 3:お預入れ 4:お取り扱い内容 5:残高 cat ${tgt_file} | # 年月日でソート LANG=C sort -k1,1 | # 重複列の除外 uniq | # 年月の追加 # 1:年月 2:年月日 3:お引出し 4:お預入れ 5:お取り扱い内容 6:残高 awk '{print substr($1,1,6), $0}' | # 年月単位でファイルの分割 # 1:年月日 2:お引出し 3:お預入れ 4:お取り扱い内容 5:残高 keycut -d ${lv3d}/%1 [ $(plus ${PIPESTATUS[@]}) -eq 0 ] || ERROR_EXIT echo SUCCESS $(basename $0) rm -f ${tmp}-* exit 0
keycut
ユニケージコマンドはman2
というコマンドで仕様を確認できる。
mba:YOKIN 7010oncajon$ man2 keycut Tukubaiオンラインコマンドマニュアル keycut(1) 【名前】 keycut : キーでファイルを分割 【書式】 Usage : keycut [options] <filename> <file> Options : -d : キーの削除 : -a : ファイル追記 : -z : 圧縮 Version : Thu Dec 15 13:46:38 JST 2011 (Version: zlib-1.2.3 ) 【説明】 <file>を読み込み、分割先ファイル名<filename>で指定したキーフィールドの値が同一 の行でファイルを分割する。例えば、第2フィールドが同じ値を持つ行でファイルを分割 したいときは、data.%2のように<filename>を指定する。この時、分割先ファイル名は data.(第2フィールドの値)となる。
Output(LV3データ)
このデータだけでも十分利用価値はありそうだな。
mba:YOKIN 7010oncajon$ cat DATA/LV3/YOKIN/208703 | keta 20870301 60000 _ カード_ENET000000 500000 20870307 30000 _ カード_ENET000001 470000 20870316 5000 _ 電気料 465000 20870319 _ 200000 給料振込_会社名 665000 20870327 3000 _ ガスダイ3ガツ 662000 20870328 1000 _ ゲスイドウ_シヨウリヨウ 661000 20870328 _ 9000 交通費振込_会社名 670000
以上。次回はLV4MAKEです。