Tukubaiオンラインコマンドマニュアル - loopj(1)

loopj(1)

【名前】

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

【書式】

Usage   : loopj [-d<string>] num=<num> <file1> <file2> ..
Version : Sat Jun 20 21:57:20 JST 2020
Edition : 1

【説明】

引数で指定した複数のテキストファイルを、第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
$

【関連項目】

join0(1)join1(1)join2(1)loopx(1)up3(1)マスタファイル(5)トランザクションファイル(5)

Last modified: 2023-11-11 19:43:18