抽出、連結および集計を組み合わせて、以下の一連処理を実行します。
XML形式の従業員データより、勤務地が大阪の従業員情報を抽出します。
入力マスタファイルと連結して事業所情報を付け加えます。
勤務地ごとに集計します。
1つ目のコマンドの結果を標準出力に出力し、その出力を2つ目のコマンドの入力とすることで、複数のコマンドの処理を一連の処理として実行できます。
処理の概要を以下に示します。
本項で使用するデータは以下になります。
従業員データ
"ENO","NAME","DEPARTMENT","POSITION","AREA","BLDG" "070","田中","総務","課員","大阪","竹ビル" "031","鈴木","総務","課員","大阪","竹ビル" "003","高橋","総務","課長","東京","松ビル" "009","渡辺","営業","課長","大阪","竹ビル" "120","伊藤","総務","課長","大阪","竹ビル" "055","山本","総務","課員","大阪","竹ビル" "135","中村","営業","課長","東京","松ビル" "095","小林","営業","課員","東京","松ビル" "094","斎藤","営業","課員","東京","松ビル" "085","加藤","営業","課員","大阪","竹ビル" "033","佐藤","営業","課員","福岡","梅ビル" "032","吉田","営業","課員","福岡","梅ビル" |
従業員データ
<EMPLOYEE><ENO>070</ENO><NAME>田中</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>031</ENO><NAME>鈴木</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>003</ENO><NAME>高橋</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課長</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>009</ENO><NAME>渡辺</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課長</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>120</ENO><NAME>伊藤</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課長</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>055</ENO><NAME>山本</NAME><DEPARTMENT>総務</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>135</ENO><NAME>中村</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課長</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>095</ENO><NAME>小林</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>094</ENO><NAME>斎藤</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>東京</AREA><BLDG>松ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>085</ENO><NAME>加藤</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>大阪</AREA><BLDG>竹ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>033</ENO><NAME>佐藤</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>福岡</AREA><BLDG>梅ビル</BLDG></EMPLOYEE> <EMPLOYEE><ENO>032</ENO><NAME>吉田</NAME><DEPARTMENT>営業</DEPARTMENT><POSITION>課員</POSITION><AREA>福岡</AREA><BLDG>梅ビル</BLDG></EMPLOYEE> |
事務所データ
"LOCALE","BLDG","NEWBLDG","PHONE","CODE","ADDRESS" "東京","松ビル","","7100","00001","東京都品川区東五反田" "大阪","竹ビル","亀ビル","7200","00002","大阪府大阪市北区梅田" "福岡","梅ビル","","7300","00008","福岡県福岡市博多区中州" |
事務所データ
<INFO><LOCALE>東京</LOCALE><BLDG></BLDG><NEWBLDG></NEWBLDG><PHONE>7100</PHONE><CODE>00001</CODE><ADDRESS>東京都港区高輪</ADDRESS></INFO> <INFO><LOCALE>大阪</LOCALE><BLDG>竹ビル</BLDG><NEWBLDG>亀ビル</NEWBLDG><PHONE>7200</PHONE><CODE>00002</CODE><ADDRESS>大阪府大阪市北区梅田</ADDRESS></INFO> <INFO><LOCALE>福岡</LOCALE><BLDG>梅ビル</BLDG><NEWBLDG></NEWBLDG><PHONE>7300</PHONE><CODE>00008</CODE><ADDRESS>福岡県福岡市博多区博多駅</ADDRESS></INFO> |
コマンドの実行例を以下に示します。
(1)select用動作環境ファイル(select.cfg)の定義
Windowsの場合
# 文字コード CharacterCode SHIFT-JIS # 入力ファイルタイプ InFileType XML # スキップキャラクタ SkipChar "¥s,¥n,¥t,¥S" # 区切り文字 SeparateChar "¥s,¥n,¥t" # 半角英字の大文字・小文字の区別 ANKmix 0 # 全角英字の大文字・小文字の区別 KNJmix 0 # ログファイル LogFile "D:¥Shunsaku¥log¥Select.log" |
Linux/Solarisの場合
# 文字コード CharacterCode EUC # 入力ファイルタイプ InFileType XML # スキップキャラクタ SkipChar "¥s,¥n,¥t,¥S" # 区切り文字 SeparateChar "¥s,¥n,¥t" # 半角英字の大文字・小文字の区別 ANKmix 0 # 全角英字の大文字・小文字の区別 KNJmix 0 # ログファイル LogFile /home/shun/log/Select.log |
(2)入力定義ファイル(selin.cfg)の記述
Windowsの場合
DataFile "D:¥Shunsaku¥data¥Employee.xml" |
Linux/Solarisの場合
DataFile /home/shun/data/Employee.xml |
(3)検索定義ファイル(selquery.cfg)の記述
1 /EMPLOYEE/AREA = '大阪' |
(4)replace用動作環境ファイル(replace.cfg)の定義
Windowsの場合
# 入力ジャーナルファイル JnlFile Journal "" # 入力マスタファイル MstFile {Master "D:¥Shunsaku¥data¥Company.xml"} # ログファイル LogFile "D:¥Shunsaku¥log¥Replace.log" |
Linux/Solarisの場合
# 入力ジャーナルファイル JnlFile Journal "" # 入力マスタファイル MstFile {Master "/home/shun/data/Company.xml"} # ログファイル LogFile /home/shun/log/Replace.log |
(5)連結条件ファイル(joincond.cfg)の記述
Windowsの場合
# 文字コード CharacterCode SHIFT-JIS # 入力ファイルタイプ InFileType XML # 出力ファイルタイプ OutFileType CSV # 入力項目定義 ListDef {document(Journal){$JENO /EMPLOYEE/ENO/text(), $JNAME /EMPLOYEE/NAME/text(), $JDEPARTMENT /EMPLOYEE/DEPARTMENT/text(), $JPOSITION /EMPLOYEE/POSITION/text(), $JAREA /EMPLOYEE/AREA/text(), $JBLDG /EMPLOYEE/BLDG/text() }, document(Master){ $MLOCALE /INFO/LOCALE/text(), $MBLDG /INFO/BLDG/text(), $MNEWBLDG /INFO/NEWBLDG/text(), $MPHONE /INFO/PHONE/text() } } # 出力項目定義 OutputDef { $JENO, $JNAME, $JDEPARTMENT, $JPOSITION, $JAREA, $MNEWBLDG, $MPHONE } # 連結条件ファイル Jcondition { $JAREA == $MLOCALE } |
Linux/Solarisの場合
# 文字コード CharacterCode EUC # 入力ファイルタイプ InFileType XML # 出力ファイルタイプ OutFileType CSV # 入力項目定義 ListDef {document(Journal){$JENO /EMPLOYEE/ENO/text(), $JNAME /EMPLOYEE/NAME/text(), $JDEPARTMENT /EMPLOYEE/DEPARTMENT/text(), $JPOSITION /EMPLOYEE/POSITION/text(), $JAREA /EMPLOYEE/AREA/text(), $JBLDG /EMPLOYEE/BLDG/text() }, document(Master){ $MLOCALE /INFO/LOCALE/text(), $MBLDG /INFO/BLDG/text(), $MNEWBLDG /INFO/NEWBLDG/text(), $MPHONE /INFO/PHONE/text() } } # 出力項目定義 OutputDef { $JENO, $JNAME, $JDEPARTMENT, $JPOSITION, $JAREA, $MNEWBLDG, $MPHONE } # 連結条件ファイル Jcondition { $JAREA == $MLOCALE } |
(6)analyze用動作環境ファイル(analyze.cfg)の定義
Windowsの場合
# 出力ファイル OutFile "D:¥Shunsaku¥kekka01.csv" |
Linux/Solarisの場合
# 出力ファイル OutFile /home/shun/kekka01.csv |
(7)集計条件ファイル(anacond.cfg)の記述
Windowsの場合
# 文字コード CharacterCode SHIFT-JIS # 入力ファイルタイプ InFileType CSV # 出力ファイルタイプ OutFileType CSV # グループ式 GCondition } $JDEPARTMENT }, $JENO } # 集計式 RCondition $JNAME, $JPOSITION, $JAREA, $MNEWBLDG, $MPHONE, count() COUNT |
Linux/Solarisの場合
# 文字コード CharacterCode EUC # 入力ファイルタイプ InFileType CSV # 出力ファイルタイプ OutFileType CSV # グループ式 GCondition } $JDEPARTMENT }, $JENO } # 集計式 RCondition $JNAME, $JPOSITION, $JAREA, $MNEWBLDG, $MPHONE, count() COUNT |
(8)コマンドの実行
Windowsの場合
shunselect -s D:¥Shunsaku¥select.cfg -i D:¥Shunsaku¥selin.cfg -q D:¥Shunsaku¥selquery.cfg | ¥ shunreplace -s D:¥Shunsaku¥replace.cfg -j D:¥Shunsaku¥joincond.cfg | ¥ shunanalyze -s D:¥Shunsaku¥analyze.cfg -a D:¥Shunsaku¥anacond.cfg |
Linux/Solarisの場合
shunselect -s /home/shun/select.cfg -i /home/shun/selin.cfg -q /home/shun/selquery.cfg | ¥ shunreplace -s /home/shun/replace.cfg -j /home/shun/joincond.cfg | ¥ shunanalyze -s /home/shun/analyze.cfg -a /home/shun/anacond.cfg |
実行結果イメージ
"JDEPARTMENT","JENO","JNAME","JPOSITION","JAREA","MNEWBLDG","MPHONE","COUNT" "営業","009","渡辺","課長","大阪","亀ビル","7200",1 "営業","085","加藤","課員","大阪","亀ビル","7200",1 "営業","-","渡辺","課長","大阪","亀ビル","7200",2 "総務","031","鈴木","課員","大阪","亀ビル","7200",1 "総務","055","山本","課員","大阪","亀ビル","7200",1 "総務","070","田中","課員","大阪","亀ビル","7200",1 "総務","120","伊藤","課長","大阪","亀ビル","7200",1 "総務","-","鈴木","課員","大阪","亀ビル","7200",4 "-","-","渡辺","課長","大阪","亀ビル","7200",6 |