「join0」の版間の差分
Pt4a editor (トーク | 投稿記録) 細 (Batch Update) |
USPVisitor (トーク | 投稿記録) 細 (msort にリンクを設定。) |
||
(他の1人の利用者による、間の1版が非表示) | |||
19行目: | 19行目: | ||
トランザクションファイル <tran> の “key=<key>” で指定したキーフィールドが マスターファイル <master> の対応するキーフィールドと マッチした行のみを <tran< から抽出して出力します。 | トランザクションファイル <tran> の “key=<key>” で指定したキーフィールドが マスターファイル <master> の対応するキーフィールドと マッチした行のみを <tran< から抽出して出力します。 | ||
− | <master> の対応するキーフィールドとは、<key> | + | <master> の対応するキーフィールドとは、<key> の最小のフィールドが第1フィールドになるように平行移動させたフィールドになります。<key> としては、 |
<pre>key=3 <tran> の第3フィールド | <pre>key=3 <tran> の第3フィールド | ||
− | key=3/5 <tran> の第3,4, | + | key=3/5 <tran> の第3,4,5フィールド(<master> は第1,2,3フィールド) |
− | key=4@3 <tran> の第4, | + | key=4@3 <tran> の第4,3フィールド(<master> は第2,1フィールド) |
− | key=NF <tran> | + | key=NF <tran> の最終フィールド(<master> は第1フィールド) |
− | key=NF-3 <tran> | + | key=NF-3 <tran> の(最終-3)フィールド(<master> は第1フィールド)</pre> |
− | が指定できます。更に、 msort のソート種別を指定することができます。 | + | が指定できます。更に、 [[msort]] のソート種別を指定することができます。 |
− | <master> および <tran> のキーフィールドはソート種別に応じてソートされていることが必要です。更に <master> | + | <master> および <tran> のキーフィールドはソート種別に応じてソートされていることが必要です。更に <master> は、キーフィールドについて、各レコードがユニークでなければなりません。(キーフィールドが同じ値を持つレコードが複数あってはなりません)<tran> についてはこの制約は無く、キーフィールドが同じ値を持つレコードが有っても構いません。 |
マッチしない行は破棄しますが、+ng オプションを指定すると、ファイルデスクリプタ <fd> へ出力します。<fd> を省略した場合は標準エラー出力へ出力します。 | マッチしない行は破棄しますが、+ng オプションを指定すると、ファイルデスクリプタ <fd> へ出力します。<fd> を省略した場合は標準エラー出力へ出力します。 | ||
38行目: | 38行目: | ||
基本パターン | 基本パターン | ||
− | 成績ファイル kekka から master | + | 成績ファイル kekka から master に登録されている4人のデータを抽出し ます。 |
− | <pre> | + | <pre>(マスターファイル:master) |
$ cat master | $ cat master | ||
0000003 杉山______ 26 F | 0000003 杉山______ 26 F | ||
47行目: | 47行目: | ||
0000010 柳本______ 50 F | 0000010 柳本______ 50 F | ||
− | + | (トランザクションファイル:kekka) | |
$ cat kekka | $ cat kekka | ||
A 0000000 91 59 20 76 54 | A 0000000 91 59 20 76 54 | ||
59行目: | 59行目: | ||
A 0000010 95 60 35 93 76 | A 0000010 95 60 35 93 76 | ||
A 0000011 92 56 83 96 75</pre> | A 0000011 92 56 83 96 75</pre> | ||
− | kekka | + | kekka の第2フィールドが master ファイルに存在する行のみ抽出 |
<pre>$ join0 key=2 master kekka > data | <pre>$ join0 key=2 master kekka > data | ||
71行目: | 71行目: | ||
左から順に連続した複数のフィールドをキーに指定する場合です。 | 左から順に連続した複数のフィールドをキーに指定する場合です。 | ||
− | <pre> | + | <pre>(マスター:master) |
$ cat master | $ cat master | ||
A 0000003 杉山______ 26 F | A 0000003 杉山______ 26 F | ||
78行目: | 78行目: | ||
C 0000010 柳本______ 50 F | C 0000010 柳本______ 50 F | ||
− | + | (トランザクション:kekka) | |
$ cat kekka | $ cat kekka | ||
01 A 0000000 91 59 20 76 54 | 01 A 0000000 91 59 20 76 54 | ||
109行目: | 109行目: | ||
<pre>$ join0 +ng3 key=<key> <master> <tran> > ok-data 3> ng-data | <pre>$ join0 +ng3 key=<key> <master> <tran> > ok-data 3> ng-data | ||
− | + | (マスターファイル:master) | |
$ cat master | $ cat master | ||
0000003 杉山______ 26 F | 0000003 杉山______ 26 F | ||
116行目: | 116行目: | ||
0000010 柳本______ 50 F | 0000010 柳本______ 50 F | ||
− | + | (トランザクションファイル:kekka) | |
$ cat kekka | $ cat kekka | ||
0000000 91 59 20 76 54 | 0000000 91 59 20 76 54 | ||
131行目: | 131行目: | ||
<pre>$ join0 +ng3 key=1 master kekka > ok-data 3> ng-data | <pre>$ join0 +ng3 key=1 master kekka > ok-data 3> ng-data | ||
− | $ cat ok-data # | + | $ cat ok-data #(マッチしたデータ) |
0000003 30 50 71 36 30 | 0000003 30 50 71 36 30 | ||
0000005 82 79 16 21 80 | 0000005 82 79 16 21 80 | ||
0000007 50 2 33 15 62 | 0000007 50 2 33 15 62 | ||
0000010 95 60 35 93 76 | 0000010 95 60 35 93 76 | ||
− | $ cat ng-data # | + | $ cat ng-data #(マッチしなかったデータ) |
0000000 91 59 20 76 54 | 0000000 91 59 20 76 54 | ||
0000001 46 39 8 5 21 | 0000001 46 39 8 5 21 | ||
163行目: | 163行目: | ||
<pre>$ join0 +ng3 key=1 master tran > /dev/null 3> ng-data</pre> | <pre>$ join0 +ng3 key=1 master tran > /dev/null 3> ng-data</pre> | ||
− | <tran> または <master> | + | <tran> または <master> を読み終わったあと、他方についても最後まで読む(読み捨てる)ので、パイプの目詰まりを起こさないように作られています。 |
<pre>$ cat bigfile | join0 key=1 master > ok-data</pre> | <pre>$ cat bigfile | join0 key=1 master > ok-data</pre> | ||
− | key=<key> 引数と -e/-s<c> オプションは msort と同じです。 | + | key=<key> 引数と -e/-s<c> オプションは [[msort]] と同じです。 |
== Version and Edition == | == Version and Edition == | ||
178行目: | 178行目: | ||
© 2021 Universal Shell Programming Laboratory [https://www.usp-lab.com/ site] | © 2021 Universal Shell Programming Laboratory [https://www.usp-lab.com/ site] | ||
− | |||
[[Category:man]] | [[Category:man]] |
2022年3月19日 (土) 03:40時点における最新版
名前
join0 : マスターにキーフィールドがマッチする行を抽出する
書式
使い方とオプション
Usage
join0 key=<key> <master> <tran>
Option
+ng[<fd>] -e -s<c>
説明
トランザクションファイル <tran> の “key=<key>” で指定したキーフィールドが マスターファイル <master> の対応するキーフィールドと マッチした行のみを <tran< から抽出して出力します。
<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 のソート種別を指定することができます。
<master> および <tran> のキーフィールドはソート種別に応じてソートされていることが必要です。更に <master> は、キーフィールドについて、各レコードがユニークでなければなりません。(キーフィールドが同じ値を持つレコードが複数あってはなりません)<tran> についてはこの制約は無く、キーフィールドが同じ値を持つレコードが有っても構いません。
マッチしない行は破棄しますが、+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=<key> <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> の “-” を省略した場合も標準入力から %lt;tran>l を読みます。
$ cat master | join0 key=1 - tran $ cat tran | join0 key=1 master - $ cat tran | join0 key=1 master # "-" を省略できます。
備考
+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
<tran> または <master> を読み終わったあと、他方についても最後まで読む(読み捨てる)ので、パイプの目詰まりを起こさないように作られています。
$ cat bigfile | join0 key=1 master > ok-data
key=<key> 引数と -e/-s<c> オプションは msort と同じです。
Version and Edition
Version : Thu Jan 14 11:01:02 JST 2021
Edition : 1
© 2021 Universal Shell Programming Laboratory site