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オンラインコマンドマニュアル

## loopj(USP Lab(1))

### 【名前】

loopj : 複数のテキストファイル全行を連結

### 【書式】

    Usage	: loopj [-d<string>] num=<num> <file1> <file2> ..
    Version	: Thu Dec 15 13:46:38 JST 2011

### 【説明】

引数で指定した複数のテキストファイルを、第1フィールドからnum=<n>で指定したフィールドまでをキーにしてすべて連結する(loopj=loop of join)。各ファイルの中でキーフィールドが一致しない行についてはそれぞれ0でフィールドを補完する。

連結する各ファイルは0バイトより大きく、キーとなるフィールドは必ずユニークかつ昇順で整列されていることが条件となる。フィールド数がキーフィールド数に満たない場合エラーとなる。また、<file>が0バイトファイルの場合にもエラーとなる。

### 【例1】基本的な使い方

    $ cat file1
    0000003 杉山______ A
    0000005 崎村______ B
    0000007 梶川______ C
    0000010 柳本______ D
    $

    $ cat file2
    0000000 50
    0000003 26
    0000004 40
    0000009 68
    $

    $ cat file3
    0000000 F
    0000003 F
    0000004 M
    0000005 F
    $

3つのファイルを連結するには次のようにコマンドを実行する。

    $ loopj num=1 file1 file2 file3
    0000000 0 0 50 F
    0000003 杉山______ A 26 F
    0000004 0 0 40 M
    0000005 崎村______ B 0 F
    0000007 梶川______ C 0 0
    0000009 0 0 68 0
    0000010 柳本______ D 0 0
    $

ファイル名を-にすることで、標準入力ファイルを連結することができる。

    $ cat file2 | loopj num=1 file1 - file3

### 【例2】-d オプション

-dオプションを使用することで補完する文字列を指定することができる。

    $ loopj -d@@@ num=1 file1 file2 file3
    0000000 @@@ @@@ 50 F
    0000003 杉山______ A 26 F
    0000004 @@@ @@@ 40 M
    0000005 崎村______ B @@@ F
    0000007 梶川______ C @@@ @@@
    0000009 @@@ @@@ 68 @@@
    0000010 柳本______ D @@@ @@@
    $

### 【例3】キーのみを持つファイルの連結

キーのみを持つファイルを連結した場合には値のみ補完が実施される。

    $ cat file1
    0001 1
    0002 2
    $

    $ cat file2
    0001
    0002
    0003
    0004
    $

    $ loopj num=1 file1 file2
    0001 1
    0002 2
    0003 0
    0004 0
    $

    $ loopj num=1 file2 file2
    0001
    0002
    0003
    0004
    $

### 【注意】

連結するファイルが0バイトの時はエラーになる。

    $ : > data1
    $ cat data2
    a 1
    b 2
    c 3
    $

    $ loopj num=1 data1 data2
    Error[loopj] : 0バイトファイル[1]は連結できません。
    $

上記の例でdata1が、例えば3フィールドあることを保証するには、次のようにコマンドを実行すれば良い。

    $ [ ! -s data1 ] && echo x 0 0 > data1
    $ loopj num=1 data1 data2 | awk '$1!~/x/
    a 0 0 1
    b 0 0 2
    c 0 0 3
    $

### 【関連項目】

loopx(USP Lab(1))

- ∧

last modified: 2012-04-12 20:28:39