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

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

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

(動画教材準備中)

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