join2
名前
join2 : トランザクションファイルにマスターファイルを連結する。
書式
使い方とオプション
Usage
join2 key=<key> <master> <tran>
Option
+<string> -f<n> -e -s<c>
説明
キーフィールドがマッチする行はマスターを連結、マッチしない行は補完データを連結して出力します。
トランザクションファイル <tran> の “key=<key>” で指定したキーフィールドが マスターファイル <master> の対応するキーフィールドとマッチした行を <tran> から抽出して、<master> の情報を連結して出力します。マッチしない行は、補完データ "_" を非キーフィールド数だけ結合して出力します。
補完データは +<string> で指定することもできます。
<master> の対応するキーフィールドとは、<key> の最小のフィールドが第1フィールドになるように平行移動させたフィールドになります。<key> としては、
key=3 <tran> の第3フィールド key=3/5 <tran> の第3,4,5フィールド(<master> は第1,2,3フィールド) key=4@3 <tran> の第4,3フィールド(<master> は第2,1フィールド) key=NF <tran> の最終フィールド(<master> は第1フィールド) key=NF-3 <tran> の(最終-3)フィールド(<master> は第1フィールド)
が指定できます。更に、msort のソート種別を指定することができます。
<master> および <tran> のキーフィールドはソート種別に応じてソートされていることが必要です。更に master> は、キーフィールドについて、各レコードがユニークでなければなりません。(キーフィールドが同じ値を持つレコードが複数あってはなりません)<tran> についてはこの制約は無く、キーフィールドが同じ値を持つレコードが有っても構いません。
<master> が空ファイル(0バイト)の場合はエラーになります。-f<n> が指定されているとエラーにならず、<n> を <master>キーフィールド数として扱います。
<master> に “-” を指定すると標準入力から読み込みます。<tran> が無指定、あるいは “-” を指定すると標準入力から読み込みます。<master> と<tran> の両方が標準入力の場合はエラーになります。
例(その1)
基本パターン
(マスターファイル:master) $ cat master 0000003 杉山______ 26 F 0000005 崎村______ 50 F 0000007 梶川______ 42 F 0000010 柳本______ 50 F (トランザクションファイル:kekka) $ cat kekka A 0000000 91 59 20 76 54 A 0000001 46 39 8 5 21 A 0000003 30 50 71 36 30 A 0000004 58 71 20 10 6 A 0000005 82 79 16 21 80 A 0000007 50 2 33 15 62 A 0000008 52 91 44 9 0 A 0000009 60 89 33 18 6 A 0000010 95 60 35 93 76 A 0000011 92 56 83 96 75
master に存在しない行は "_" で補完して出力されます。
$ join2 key=2 master kekka > data $ cat data A 0000000 _ _ _ 91 59 20 76 54 A 0000001 _ _ _ 46 39 8 5 21 A 0000003 杉山______ 26 F 30 50 71 36 30 A 0000004 _ _ _ 58 71 20 10 6 A 0000005 崎村______ 50 F 82 79 16 21 80 A 0000007 梶川______ 42 F 50 2 33 15 62 A 0000008 _ _ _ 52 91 44 9 0 A 0000009 _ _ _ 60 89 33 18 6 A 0000010 柳本______ 50 F 95 60 35 93 76 A 0000011 _ _ _ 92 56 83 96 75
例(その2)
左から順に連続した複数のフィールドをキーに指定する場合です。
(マスター:master) $ cat master A 0000003 杉山______ 26 F A 0000005 崎村______ 50 F B 0000007 梶川______ 42 F C 0000010 柳本______ 50 F (トランザクション:kekka) $ cat kekka 01 A 0000000 91 59 20 76 54 02 A 0000001 46 39 8 5 21 03 A 0000003 30 50 71 36 30 04 A 0000004 58 71 20 10 6 05 A 0000005 82 79 16 21 80 06 B 0000007 50 2 33 15 62 07 B 0000008 52 91 44 9 0 08 C 0000009 60 89 33 18 6 09 C 0000010 95 60 35 93 76 10 C 0000011 92 56 83 96 75
kekka の第2フィールド、第3フィールドをキーをマッチングします。
$ join2 key=2/3 master kekka > data $ cat data 01 A 0000000 _ _ _ 91 59 20 76 54 02 A 0000001 _ _ _ 46 39 8 5 21 03 A 0000003 杉山______ 26 F 30 50 71 36 30 04 A 0000004 _ _ _ 58 71 20 10 6 05 A 0000005 崎村______ 50 F 82 79 16 21 80 06 B 0000007 梶川______ 42 F 50 2 33 15 62 07 B 0000008 _ _ _ 52 91 44 9 0 08 C 0000009 _ _ _ 60 89 33 18 6 09 C 0000010 柳本______ 50 F 95 60 35 93 76 10 C 0000011 _ _ _ 92 56 83 96 75
左から順に連続していない複数のフィールドをキーに指定することも可能です。この場合は複数のキーフィールドを “@” で繋げて指定します。
$ join2 key=3@2 master kekka > data
例(その3)
“+<string>” 補完する文字を指定するオプションです。“+” の後に補完で使用する文字を指定します。
(マスターファイル:master) $ cat master 0000003 杉山______ 26 F 0000005 崎村______ 50 F 0000007 梶川______ 42 F 0000010 柳本______ 50 F (トランザクションファイル:kekka) $ 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 > data $ cat data 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
例 (その4)
ファイル名を “-” にすることにより、標準入力から <master> や <tran>を読むことができます。<tran> の “-” を省略した場合も標準入力から<tran> を読みます。
$ cat master | join2 key=1 - tran $ cat tran | join2 key=1 master - $ cat tran | join2 key=1 master # "-" を省略できます。
例 (その5)
<master> が空ファイルでも、-f<n> オプションが指定されている場合は<n> を <master> のキーフィールド以外のフィールド数として処理します。
$ join2 -f3 key=1 /dev/null kekka > data $ cat data 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
備考
+<string> オプションは、旧 -d<string> オプションと同じです。
-d<string> オプションは廃止予定です。
key=<key> 引数と -e/-s<c> オプションは msort(USP) と同じです。
Version and Edition
Version : Thu Jan 14 11:01:02 JST 2021
Edition : 1
© 2021 Universal Shell Programming Laboratory site