cjoin1
名前
cjoin1 : シーケンシャルキーマッチングジョイン
書式
使い方とオプション
Usage
cjoin1 key=<key> <master> <tran>
Option
+ng[<fd>] -e -s<c>
説明
トランザクションファイル <tran> の “key=<key>” で指定したキーフィールドがマスターファイル <master> の対応するキーフィールドとマッチした行のみを <tran> から抽出して、<master> の情報を連結して出力します。連結は <tran> のキーフィールドの直後に <master> の内容を挿入する形で行われます。
<master> の対応するキーフィールドとは、<key> の最小のフィールドが第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フィールド)
が指定できます。更に、msort(USP) のソート種別を指定することができます。
<master> のキーフィールドはソート種別に応じてソートされていることが必要です。更にキーフィールドについて、各レコードがユニークでなければなりません。(キーフィールドが同じ値を持つレコードが複数あってはなりません)<tran> についてはこの制約は無く、キーフィールドが同じ値を持つレコードが有っても構いません。
join1 とは異なり、<tran> のキーフィールドはソートされている必要がありません。
マッチしない行は破棄しますが、+ng オプションを指定すると、ファイルデスクリプタ <fd> へ出力します。<fd> を省略した場合は標準エラー出力へ出力します。
<master> に “-” を指定すると標準入力から読み込みます。<tran> が無指定、あるいは “-” を指定すると標準入力から読み込みます。<master> と<tran> の両方が標準入力の場合はエラーになります。
cjoin1 は <master> 全体をメモリーに読み込みますので、<master> が巨大だとメモリー確保エラーが起きるので注意が必要です。
例(その1) 通常の使い方
$ cat master 0000003 杉山______ 26 F 0000005 崎村______ 50 F 0000007 梶川______ 42 F $ cat tran 0000005 82 79 16 21 80 0000001 46 39 8 5 21 0000004 58 71 20 10 6 0000009 60 89 33 18 6 0000003 30 50 71 36 30 0000007 50 2 33 15 62 $ cjoin1 key=1 master tran > ok $ cat ok 0000005 崎村______ 50 F 82 79 16 21 80 0000003 杉山______ 26 F 30 50 71 36 30 0000007 梶川______ 42 F 50 2 33 15 62
例(その2) +ng オプションの使い方
$ cjoin1 +ng3 key=1 master tran > ok-data 3> ng-data $ cat ng-data 0000001 46 39 8 5 21 0000004 58 71 20 10 6 0000009 60 89 33 18 6
例(その3) 標準入力から読む
$ cat master | cjoin1 key=1 - tran $ cat tran | cjoin1 key=1 master - $ cat tran | cjoin1 key=1 master # "-" を省略できます。
備考
key=<key> 引数と -e/-s<c> オプションは msort(USP) と同じです。
Version and Edition
Version : Thu Jan 14 11:01:02 JST 2021
Edition : 1
© 2021 Universal Shell Programming Laboratory site