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)