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

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

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

join0

<概要>

join0 : マスターにキーフィールドがマッチする行を抽出する

<書式>

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

<説明>

テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマス
ターファイル <master> の第1フィールド(キーフィールド)とマッチした
行のみを <tran> から抽出して出力します。

<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> 基本パターン

成績ファイル kekka から master に登録されている4人のデータを抽出し
ます。

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

(トランザクションファイル:kekka)
$ cat kekka
A 0000000 91 59 20 76 54
A 0000001 46 39 8  5  21
A 0000003 30 50 71 36 30
A 0000004 58 71 20 10 6
A 0000005 82 79 16 21 80
A 0000007 50 2  33 15 62
A 0000008 52 91 44 9  0
A 0000009 60 89 33 18 6
A 0000010 95 60 35 93 76
A 0000011 92 56 83 96 75

kekka の第2フィールドが master ファイルに存在する行のみ抽出
$ join0 key=2 master kekka > data
$ cat data
A 0000003 30 50 71 36 30
A 0000005 82 79 16 21 80
A 0000007 50 2  33 15 62
A 0000010 95 60 35 93 76

<例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 に存在する
行のみ抽出して出力
$ join0 key=2/3 master kekka > data
$ cat data
03 A 0000003 30 50 71 36 30
05 A 0000005 82 79 16 21 80
06 B 0000007 50 2  33 15 62
09 C 0000010 95 60 35 93 76

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

<例3> +ng オプション

マッチしないレコードを抽出することもできます。
$ join0 +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人のデータとその他のデー
タをそれぞれ抽出します。
$ join0 +ng3 key=1 master kekka > ok-data 3> ng-data
$ cat ok-data   #(マッチしたデータ)
0000003 30 50 71 36 30
0000005 82 79 16 21 80
0000007 50 2  33 15 62
0000010 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> を省略すると、マッチしないレコードは標準エラー出力へ出力します。
$ join0 +ng key=1 master kekka > ok-data 2> ng-data

<例4>

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

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

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

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

<コラム2>

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