rjoin0 <概要> rjoin0 : マスターにキーフィールドがマッチする行を抽出する。 値の数値比較を行い、範囲内となるマスターを連結する。 <書式> Usage : rjoin0 [key=<n1>] [range=<n2>] val=<n3> <master> <tran> Option : +ng[<fd>] Version : Tue Mar 19 20:08:05 JST 2019 Edition : 2 <説明> トランザクションファイル <tran> の "key=<n1>" で指定したキーフィール ドがマスターファイル <master> の第1フィールド(キーフィールド)とマッ チし、かつ "range=<n2>" で指定した <master> のフィールド(範囲フィー ルド)の内容 [開始] とその次のフィールドの内容 [終了] 及び "val=<n3>" で指定した <tran> のフィールド(値フィールド)の内容 [値] が、 [開始] <= [値] <= [終了] となる行のみを <tran> から抽出して出力します。 範囲フィールド及び値フィールドは数値として扱われます。負数及び小数に も対応していますが、正しい数値でなければなりません。ただし、範囲フィ ールドに "_" が指定された場合は比較対象外となり、条件成立となります。 <master> と <tran> 共にキーフィールドで昇順にソートされている必要が あります。 キーフィールドが省略された場合、キーのマッチは行われず、<master> の 全レコードの範囲フィールドと <tran> の全レコードの値フィールドの比較 が行われます。 範囲フィールド及び値フィールドはソートされている必要は無く、範囲フィ ールドに重複があっても構いません。上記条件式が成立するマスターレコー ドが複数有っても、出力されるトランザクションレコードは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フィールド) が指定できます。 マッチしない行は破棄しますが、+ng オプションを指定すると、ファイルデ スクリプタ <fd> へ出力します。<fd> を省略した場合は標準エラー出力へ 出力します。 範囲フィールドが省略された場合、キーフィールド直後の2フィールドが範 囲フィールドになります。キーフィールドも省略されている場合は第1・2 フィールドが範囲フィールドになります。 <master> に "-" を指定すると標準入力から読み込みます。<tran> が無指 定、あるいは "-" を指定すると標準入力から読み込みます。<master> と <tran> の両方が標準入力の場合はエラーになります。 <例1> 最小パターン $ cat hyouka | keta -- 78 79 補欠合格 80 99 合格 100 100 満点 $ cat point 29 2 85 79 47 $ rjoin0 val=1 hyouka point 85 79 <例2> 基本パターン $ cat master 00001 70 20140101 20140131 00001 80 20140201 20140228 00001 90 20140301 20140331 $ cat tran AA1234 00001 30 50 20140105 71 AA1234 00001 58 90 20140217 32 AA1234 00001 43 62 20140429 77 $ rjoin0 key=2 val=5 range=3 master tran AA1234 00001 30 50 20140105 71 AA1234 00001 58 90 20140217 32 key と val は <tran> のフィールド番号を、range は <master> のフィー ルド番号を指定します。 この例の場合、以下のようにフィールドを指定しています。 (master) 00001 70 20140101 20140131 [key] [range----------] (tran) AA1234 00001 30 50 20140105 71 [key] [val---] <例3> <master> 重複パターン <master> の範囲が重複していても、出力レコードは重複しません。 $ cat prize 495.00 499.89 ニアピン賞(ショート) 499.90 500.10 ホールインワン賞 500.11 505.00 ニアピン賞(ロング) 497.44 497.45 ラッキー賞 502.50 502.50 ラッキー賞 $ cat kyori 001 495.05 002 499.49 003 577.77 004 503.58 005 500.07 006 497.44 $ rjoin0 val=2 prize kyori 001 495.05 002 499.49 004 503.58 005 500.07 006 497.44 ※ レコード 006 が重複してマッチしていますが、出力は1回だけです。 <例4> +ng オプション 抽出されなかった <tran> のレコードを出力します。 $ rjoin0 +ng3 key=2 val=5 range=3 master tran > ok-data 3> ng-data $ cat ng-data AA1234 00001 43 62 20140429 77 <fd> を省略すると、マッチしないレコードは標準エラー出力へ出力します。 $ rjoin0 +ng key=2 val=5 range=3 master tran > ok-data 2> ng-data