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