読者です 読者をやめる 読者になる 読者になる

ユニケージしてみた。(その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です。