uspTukubaiコマンドに関する様々な資料がここにあります。

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

ABC順リスト |  カテゴリ別リスト

(動画教材準備中)

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