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

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

ABC順リスト |  カテゴリ別リスト
動画説明

join1

<概要>

join1 : トランザクションファイルにマスターファイルを連結する。
        (キーフィールドがマッチする行のみ抽出)

<書式>

Usage   : join1 [+ng[<fd>]] key=<n> <master> <tran>
Version : Mon Feb  4 10:53:34 JST 2019
Edition : 1

<説明>

テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマス
ターファイル <master> の第1フィールド(キーフィールド)とマッチした
行のみを <tran> から抽出して、<master> の情報を連結して出力します。
連結は <tran> のキーフィールドの直後に <master> の内容を挿入する形で
行われます。

<master> の第1フィールドおよび <tran> の 第 <n> フィールドは必ず昇
順でソートされていることが条件になります。更に <master> についてはキ
ーフィールド(第1フィールド)について、各レコードがユニークでなけれ
ばなりません。(第1フィールドが同じ値をもつレコードが複数あってはな
りません)<tran> についてはこの制約は無く、キーフィールド(第 <n> フ
ィールド)が同じ値を持つレコードが有っても構いません。

<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> を省略した場合は標準エラー出力へ
出力します。

<master> に "-" を指定すると標準入力から読み込みます。<tran> が無指
定、あるいは "-" を指定すると標準入力から読み込みます。<master> と
<tran> の両方が標準入力の場合はエラーになります。

<例1> 基本パターン

経費ファイル keihi から master に登録されている4人のデータを抽出し、
master の内容を連結します。

(マスターファイル:master)
$ cat master
0000003 杉山______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F

(トランザクションファイル:keihi)
$ cat keihi
20070401 0000001 300
20070403 0000001 500
20070404 0000001 700
20070401 0000003 200
20070402 0000003 400
20070405 0000003 600
20070401 0000005 250
20070402 0000005 450
20070402 0000007 210
20070404 0000007 410
20070406 0000007 610

keihi の第2フィールドをキーにして master を結合
$ join1 key=2 master keihi > data
$ cat data
20070401 0000003 杉山______ 26 F 200
20070402 0000003 杉山______ 26 F 400
20070405 0000003 杉山______ 26 F 600
20070401 0000005 崎村______ 50 F 250
20070402 0000005 崎村______ 50 F 450
20070402 0000007 梶川______ 42 F 210
20070404 0000007 梶川______ 42 F 410
20070406 0000007 梶川______ 42 F 610

<例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フィールドをキーにして、master に存在する
行のみ抽出して、master の内容を連結して出力
$ join1 key=2/3 master tran > data
$ cat data
03 A 0000003 杉山______ 26 F 30 50 71 36 30
05 A 0000005 崎村______ 50 F 82 79 16 21 80
06 B 0000007 梶川______ 42 F 50 2  33 15 62
09 C 0000010 柳本______ 50 F 95 60 35 93 76

左から順に連続していない複数のフィールドをキーに指定することも 可能で
す。この場合は複数のキーフィールドを "@" で繋げて指定します。
$ join1 key=3@2 master kekka > data

<例3> "+ng" オプション

マッチしないレコードを抽出することもできます。
$ join1 +ng3 key=<n> <master> <tran> > ok-data 3> ng-data

(マスターファイル: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

成績ファイル kekka から、master に存在する4人のデータとその他のデー
タをそれぞれ抽出します。
$ cat ok-data        #(マッチしたデータ)(master が連結されている)
0000003 杉山______ 26 F 30 50 71 36 30
0000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2  33 15 62
0000010 柳本______ 50 F 95 60 35 93 76

$ cat ng-data        #(マッチしなかったデータ)(連結されずに出力)
0000000 91 59 20 76 54
0000001 46 39 8  5  21
0000004 58 71 20 10 6
0000008 52 91 44 9  0
0000009 60 89 33 18 6
0000011 92 56 83 96 75

<fd> を省略すると、マッチしないレコードは標準エラー出力へ出力します。
$ join1 +ng key=1 master kekka > ok-data 2> ng-data

<例4>

ファイル名を "-" にすることにより、標準入力から <master> や <tran>
を読むことができます。<tran> の "-" を省略した場合も標準入力から
<tran> を読みます。
$ cat master | join1 key=1 - tran
$ cat tran | join1 key=1 master -
$ cat tran | join1 key=1 master      # "-" を省略できます。

<コラム1> "+ng" オプションのコメント

アンマッチのデータをパイプで次のコマンドへつなぐ場合は次の様に記述し
ます。
$ join1 +ng3 key=1 master tran 3>&1 1> ok-data  |  次のコマンド

アンマッチのデータのみ出力したい場合は、マッチデータは /dev/null へ
出力します。
$ join1 +ng3 key=1 master tran > /dev/null 3> ng-data

<コラム2>

<tran> または <master> を読み終わったあと、他方についても最後まで読
む(読み捨てる)ので、パイプの目詰まりを起こさないように作られていま
す。
$ cat bigfile | join1 key=1 master > ok-data