rjoin1 <概要> rjoin1 : トランザクションファイルにマスターファイルを連結する。 値の数値比較を行い、範囲内となるマスターを連結する。 <書式> Usage : rjoin1 [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> の内容を挿入す る形で行われます。 範囲フィールド及び値フィールドは数値として扱われます。負数及び小数に も対応していますが、正しい数値でなければなりません。ただし、範囲フィ ールドに "_" が指定された場合は比較対象外となり、条件成立となります。 <master> と <tran> 共にキーフィールドで昇順にソートされている必要が あります。 キーフィールドが省略された場合、キーのマッチは行われず、<master> の 全レコードの範囲フィールドと <tran> の全レコードの値フィールドの比較 が行われます。 範囲フィールド及び値フィールドはソートされている必要は無く、範囲フィ ールドに重複があっても構いません。重複がある場合、上記条件式が成立す るすべてのマスターレコードとマッチします。 <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 -- _ -1 採点ミス 0 29 赤点 30 77 失格 78 79 補欠合格 80 99 合格 100 100 満点 101 _ 不正 $ cat point 29 2 85 79 47 $ rjoin1 val=1 hyouka point | keta -- 0 29 赤点 29 0 29 赤点 2 80 99 合格 85 78 79 補欠合格 79 30 77 失格 47 <例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 $ rjoin1 key=2 val=5 range=3 master tran | keta -- AA1234 00001 70 20140101 20140131 30 50 20140105 71 AA1234 00001 80 20140201 20140228 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---] key の後ろに、val の値が range の範囲内に存在する <master> のレコー ドが連結されます。 (output) AA1234 00001 70 20140101 20140131 30 50 20140105 71 [tran] [key] [master------------] [tran-----------] <例3> <master> 重複パターン <master> の範囲が重複している場合、範囲内となるマスタのレコードが全 て出力されます。 $ cat prize | keta -- _ 494.99 はずれ(ショート) 495.00 499.89 ニアピン賞(ショート) 499.90 500.10 ホールインワン賞 500.11 505.00 ニアピン賞(ロング) 505.01 _ はずれ(ロング) 477.70 477.79 ラッキー賞 577.70 577.79 ラッキー賞 464.90 464.99 ヨロシク賞 596.30 596.39 ゴクロウサン賞 $ cat kyori 001 495.05 002 499.49 003 577.77 004 503.58 005 500.07 006 464.92 $ rjoin1 val=2 prize kyori | keta -- 495.00 499.89 ニアピン賞(ショート) 001 495.05 495.00 499.89 ニアピン賞(ショート) 002 499.49 505.01 _ はずれ(ロング) 003 577.77 577.70 577.79 ラッキー賞 003 577.77 500.11 505.00 ニアピン賞(ロング) 004 503.58 499.90 500.10 ホールインワン賞 005 500.07 _ 494.99 はずれ(ショート) 006 464.92 464.90 464.99 ヨロシク賞 006 464.92 ※ レコード 003 と 006 が重複して出力されています。 <例4> +ng オプション 抽出されなかった <tran> のレコードを出力します。 $ rjoin1 +ng3 key=2 val=5 range=3 master tran > ok-data 3> ng-data $ cat ng-data AA1234 00001 43 62 20140429 77 <fd> を省略すると、マッチしないレコードは標準エラー出力へ出力します。 $ rjoin1 +ng key=2 val=5 range=3 master tran > ok-data 2> ng-data