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

join2(USP Lab(1))

【名前】

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

【書式】

Usage	: join2 [-d<string>] [+<string>] key=<key> <master_file> <trans_file>
Version	: Thu Dec 15 13:46:38 JST 2011
	UTF-8

【説明】

テキストファイルtranのkey=<n>で指定したキーフィールドがマスターファイルmasterの第1フィールド(キーフィールド)と一致した行をtranから抽出し、masterの情報を連結して出力する。一致しない行はダミーデータ*を連結して出力する。ダミーデータは別途-dオプションにて指定することもできる。

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

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

【例1】基本パターン

$ 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
$ 

masterに存在しない行は次のように*で補完して出力される。

$ join2 key=1 master kekka
0000000 ********** ** * 91 59 20 76 54
0000001 ********** ** * 46 39 8  5  21
0000003 杉山______ 26 F 30 50 71 36 30
0000004 ********** ** * 58 71 20 10 6
0000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2  33 15 62
0000008 ********** ** * 52 91 44 9  0
0000009 ********** ** * 60 89 33 18 6
0000010 柳本______ 50 F 95 60 35 93 76
0000011 ********** ** * 92 56 83 96 75
$ 

【例2】

左から順に連続した複数のフィールドをキーに指定する場合次のようになる。第2、第3フィールドでキーが一致するかどうかをチェックしている。

$ 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
$ 
$ join2 key=2/3 master kekka
1 A 0000000 ********** ** * 91 59 20 76 54
2 A 0000001 ********** ** * 46 39 8  5  21
3 A 0000003 杉山______ 26 F 30 50 71 36 30
4 A 0000004 ********** ** * 58 71 20 10 6
5 A 0000005 崎村______ 50 F 82 79 16 21 80
6 B 0000007 梶川______ 42 F 50 2  33 15 62
7 B 0000008 ********** ** * 52 91 44 9  0
8 C 0000009 ********** ** * 60 89 33 18 6
9 C 0000010 柳本______ 50 F 95 60 35 93 76
10 C 0000011 ********** ** * 92 56 83 96 75
$ 

【例3】

+<string>はダミーデータとして補完する文字を指定するオプション。+の後に補完で使用する文字を指定する。

$ 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
$ 
$ join2 +@ key=1 master kekka
0000000 @ @ @ 91 59 20 76 54
0000001 @ @ @ 46 39 8  5  21
0000003 杉山______ 26 F 30 50 71 36 30
0000004 @ @ @ 58 71 20 10 6
0000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2  33 15 62
0000008 @ @ @ 52 91 44 9  0
0000009 @ @ @ 60 89 33 18 6
0000010 柳本______ 50 F 95 60 35 93 76
0000011 @ @ @ 92 56 83 96 75
$ 

【コラム】

masterが0バイトの時は何も連結せずtranそのものを出力する。

$ : > master
$ join2 key=1 master tran > data
$ cmp tran data		←同じデータが出力される

masterのフィールドを保証したい時は、例えば次のようなコードを書く。

$ [ ! -s master ] && echo 0000000 0 > master 
$ join2 key=1 master tran

join0(USP Lab(1))join1(USP Lab(1))

last modified: 2012-04-27 19:42:24