UEC - UNIXを深く理解し、シェルプログラミングを極めるコミュニティサイト

- Tukubaiマニュアル
  - cgi-name(1)
  - check_attr_name(1)
  - check_need_name(1)
  - comma(1)
  - count(1)
  - ctail(1)
  - delf(1)
  - divsen(1)
  - getfirst(1)
  - getlast(1)
  - gyo(1)
  - han(1)
  - join0(1)
  - join1(1)
  - join2(1)
  - juni(1)
  - kasan(1)
  - keta(1)
  - keycut(1)
  - loopj(1)
  - loopx(1)
  - map(1)
  - marume(1)
  - mdate(1)
  - mime-read(1)
  - mojihame(1)
  - nameread(1)
  - plus(1)
  - rank(1)
  - ratio(1)
  - retu(1)
  - self(1)
  - sm2(1)
  - sm4(1)
  - sm5(1)
  - tarr(1)
  - tateyoko(1)
  - tcat(1)
  - unmap(1)
  - up3(1)
  - yarr(1)
  - ycat(1)
  - yobi(1)
  - ysum(1)
  - zen(1)
  - タグ形式(5)
  - ネーム形式(5)
  - フィールド形式(5)

# Tukubaiオンラインコマンドマニュアル

## join1(USP Lab(1))

### 【名前】

join1 : トランザクションファイルにマスターファイルを連結

### 【書式】

    Usage	: join1 [+ng[<fd>]] key=<n> <master> <tran>
    Version	: Thu Dec 15 13:46:38 JST 2011

### 【説明】

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

masterの第1フィールドおよびtranの第<n>フィールドは必ず昇順で整列されていることが条件となる。また、masterのキーフィールド(第1フィールド)はユニークでなければならない。(第1フィールドが同じ値をもつ行が複数あってはならない)。tranについてはこの制約はなく、キーフィールド(第<n>フィールド)が同じ値を行はいくつあっても構わない。

キーに選択するフィールドは複数指定することも可能。

+ng<fd>オプションを使うことで、一致した行を標準出力ファイルへ、一致しなかった行をファイルデスクリプタ<fd>のファイルへ出力することが可能。<fd>を省略した場合は標準エラー出力へ出力する。

### 【例1】基本パターン

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

    $ cat master
    0000003 杉山______ 26 F
    0000005 崎村______ 50 F
    0000007 梶川______ 42 F
    0000010 柳本______ 50 F
    $

    $ 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を結合する。masterに存在するキーをもつ行にしか連結を行わない。存在しない行は捨てられる。keihiは同じキーを持つ行が複数行あっても構わない。

    $ join1 key=2 master keihi
    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】

左から順に連続した複数のフィールドをキーに指定する場合は次のように実行する。kekkaファイルの第2フィールド、第2フィールドをキーにして(第2、第3フィールド順に整列されている)masterファイル(第1、第2フィールドの順に整列されている)に存在する行のみ抽出して、masterの内容を連結して出力している。

    $ cat master
    A 0000003 杉山______ 26 F
    A 0000005 崎村______ 50 F
    B 0000007 梶川______ 42 F
    C 0000010 柳本______ 50 F
    $

    $ cat kekka
    1 A 0000000 91 59 20 76 54
    2 A 0000001 46 39 8  5  21
    3 A 0000003 30 50 71 36 30
    4 A 0000004 58 71 20 10 6
    5 A 0000005 82 79 16 21 80
    6 B 0000007 50 2  33 15 62
    7 B 0000008 52 91 44 9  0
    8 C 0000009 60 89 33 18 6
    9 C 0000010 95 60 35 93 76
    10 C 0000011 92 56 83 96 75
    $

    $ join1 key=2/3 master kekka
    3 A 0000003 杉山______ 26 F 30 50 71 36 30
    5 A 0000005 崎村______ 50 F 82 79 16 21 80
    6 B 0000007 梶川______ 42 F 50 2  33 15 62
    9 C 0000010 柳本______ 50 F 95 60 35 93 76
    $

左から順に連続していない複数のフィールドをキーに指定することも可能。この場合は複数のキーフィールドを@でつなげて指定する。なお次の例の場合には、tranは第4、第2フィールドの順に整列され、masterは第3、第1フィールドの順に整列されていることが必要となる。

    $ join1 key=4@2 master tran

### 【例3】"+ng" オプション

masterとキーに一致しない行を抽出することも可能。キーに一致する行は標準出力に、一致しない行は標準エラー出力に出力される。この場合、一致する行はマスターファイルと連結されるが、一致しない行はマスターに存在しないため連結されずそのまま出力されることになる。

    $ cat master
    0000003 杉山______ 26 F
    0000005 崎村______ 50 F
    0000007 梶川______ 42 F
    0000010 柳本______ 50 F
    $

    $ 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名のデータとその他のデータはそれぞれ次のように抽出できる。

    $ join1 +ng key=1 master kekka > ok-data 2> ng-data

    $ cat ok-data		←　一致したデータ
    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
    $

### 【関連項目】

join0(USP Lab(1))、join2(USP Lab(1))

- ∧

last modified: 2012-04-23 16:44:31