Tukubaiオンラインコマンドマニュアル

join1(USP Lab(1))

【名前】

join1 : トランザクションファイルにマスターファイルを連結

【書式】

Usage   : join1 [+ng[<fd>]] key=<n> <master> <tran>
Version : Thu Dec 15 13:46:38 JST 2011

【説明】

テキストファイルtranのkey=<n>で指定したキーフィールドがマスターファイルmasterの
第1フィールド(キーフィールド)と一致した行のみtranから抽出して、masterの情報を連
結して出力する。連結はtranのキーフィールドの直後にmasterの内容を挿入連結する形
で実施される。

masterの第1フィールドおよびtranの第<n>フィールドは必ず昇順で整列されていること
が条件となる。また、masterのキーフィールド(第1フィールド)はユニークでなければな
らない。(第1フィールドが同じ値をもつ行が複数あってはならない)。tranについてはこ
の制約はなく、キーフィールド(第<n>フィールド)が同じ値を行はいくつあっても構わな
い。

キーに選択するフィールドは複数指定することも可能。

+ng<fd>オプションを使うことで、一致した行を標準出力ファイルへ、一致しなかった行
をファイルデスクリプタ<fd>のファイルへ出力することが可能。<fd>を省略した場合は
標準エラー出力へ出力する。

【例1】基本パターン

経費ファイルkeihiからmasterに登録されている4人のデータを抽出し、マスターの内容
を連結する。

$ cat master
0000003 杉山______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F
$

$ cat keihi
20070401 0000001 300
20070403 0000001 500
20070404 0000001 700
20070401 0000003 200
20070402 0000003 400
20070405 0000003 600
20070401 0000005 250
20070402 0000005 450
20070402 0000007 210
20070404 0000007 410
20070406 0000007 610
$

keihiの第2フィールドをキーにしてmasterを結合する。masterに存在するキーをもつ行
にしか連結を行わない。存在しない行は捨てられる。keihiは同じキーを持つ行が複数行
あっても構わない。

$ join1 key=2 master keihi
20070401 0000003 杉山______ 26 F 200
20070402 0000003 杉山______ 26 F 400
20070405 0000003 杉山______ 26 F 600
20070401 0000005 崎村______ 50 F 250
20070402 0000005 崎村______ 50 F 450
20070402 0000007 梶川______ 42 F 210
20070404 0000007 梶川______ 42 F 410
20070406 0000007 梶川______ 42 F 610
$

【例2】

左から順に連続した複数のフィールドをキーに指定する場合は次のように実行する。
kekkaファイルの第2フィールド、第2フィールドをキーにして(第2、第3フィールド順に
整列されている)masterファイル(第1、第2フィールドの順に整列されている)に存在する
行のみ抽出して、masterの内容を連結して出力している。

$ cat master
A 0000003 杉山______ 26 F
A 0000005 崎村______ 50 F
B 0000007 梶川______ 42 F
C 0000010 柳本______ 50 F
$

$ cat kekka
1 A 0000000 91 59 20 76 54
2 A 0000001 46 39 8  5  21
3 A 0000003 30 50 71 36 30
4 A 0000004 58 71 20 10 6
5 A 0000005 82 79 16 21 80
6 B 0000007 50 2  33 15 62
7 B 0000008 52 91 44 9  0
8 C 0000009 60 89 33 18 6
9 C 0000010 95 60 35 93 76
10 C 0000011 92 56 83 96 75
$

$ join1 key=2/3 master kekka
3 A 0000003 杉山______ 26 F 30 50 71 36 30
5 A 0000005 崎村______ 50 F 82 79 16 21 80
6 B 0000007 梶川______ 42 F 50 2  33 15 62
9 C 0000010 柳本______ 50 F 95 60 35 93 76
$

左から順に連続していない複数のフィールドをキーに指定することも可能。この場合は
複数のキーフィールドを@でつなげて指定する。なお次の例の場合には、tranは第4、第2
フィールドの順に整列され、masterは第3、第1フィールドの順に整列されていることが
必要となる。

$ join1 key=4@2 master tran

【例3】"+ng" オプション

masterとキーに一致しない行を抽出することも可能。キーに一致する行は標準出力に、
一致しない行は標準エラー出力に出力される。この場合、一致する行はマスターファイ
ルと連結されるが、一致しない行はマスターに存在しないため連結されずそのまま出力
されることになる。

$ cat master
0000003 杉山______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F
$

$ cat kekka
0000000 91 59 20 76 54
0000001 46 39 8  5  21
0000003 30 50 71 36 30
0000004 58 71 20 10 6
0000005 82 79 16 21 80
0000007 50 2  33 15 62
0000008 52 91 44 9  0
0000009 60 89 33 18 6
0000010 95 60 35 93 76
0000011 92 56 83 96 75
$

成績ファイルkekkaからmasterに登録されている4名のデータとその他のデータはそれぞ
れ次のように抽出できる。

$ join1 +ng key=1 master kekka > ok-data 2> ng-data

$ cat ok-data           ←　一致したデータ
0000003 杉山______ 26 F 30 50 71 36 30
0000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2  33 15 62
0000010 柳本______ 50 F 95 60 35 93 76
$

$ cat ng-data           ←　一致しなかったデータ
0000000 91 59 20 76 54
0000001 46 39 8  5  21
0000004 58 71 20 10 6
0000008 52 91 44 9  0
0000009 60 89 33 18 6
0000011 92 56 83 96 75
$

【関連項目】

join0(USP Lab(1))、join2(USP Lab(1))

last modified: 2012-04-23 16:44:31
Contact us: uecinfo@usp-lab.com
Copyright (c) 2012 Universal Shell Programming Laboratory All Rights Reserved.
