Tukubaiオンラインコマンドマニュアル - join2(1)
join2(1)
【名前】
join2
: トランザクションファイルにマスタファイルを連結(一致しなかった行はダミーデータへ置換)
【書式】
Usage : join2 [-d<string>|+<string>] key=<key> <master> [<tran>] Version : Sun Jun 19 23:55:51 JST 2022 Edition : 1
【説明】
tranのkey=<n>
で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と一致した行をtranから抽出し、masterの情報を連結して出力する。一致しない行はダミーデータ*を連結して出力する。ダミーデータは-d
オプションまたは+オプションにて指定できる。
masterに-
を指定すると標準入力をマスタファイルとする。tranが無指定かまたは-
が指定されている場合には、標準入力がトランザクションファイルとなる。
masterの第1フィールドおよびtranの第<n>
フィールドは必ず昇順で整列されていることが条件となる。また、masterのキーフィールド(第1フィールド)はユニークでなければならない。(第1フィールドが同じ値をもつ行が複数あってはならない)。tranについてはこの制約はなく、キーフィールド(第<n>
フィールド)が同じ値の行はいくつあっても構わない。
キー指定にひとつでも0があると全フィールドを指定したことになる
tran
でキーが整列されていないものはjoin2(1)では処理できない。その場合は一旦tranを整列してからjoin2(1)で処理するか、join2(1)のかわりにcjoin2(1)を使って処理すればよい。
【例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
【関連項目】
cjoin0(1)、cjoin1(1)、cjoin2(1)、join0(1)、join1(1)、loopj(1)、loopx(1)、up3(1)、マスタファイル(5)、トランザクションファイル(5)