loopj

提供: Personal Tukubai for Academic
ナビゲーションに移動 検索に移動

名前

loopj : 複数のテキストファイルの全てのレコードを連結する

loopj = loop of join3

書式

使い方とオプション

Usage

loopj [-d<string>] num=<num> <file1> <file2> ..

説明

引数で指定した複数のファイルを、第1フィールドから num=<n> で指定したフィールドまでをキーにして全て連結します。各ファイルの中でキーフィールドがマッチングしないレコードについては、それぞれ “0” でフィールドを補完します。

連結する各ファイルは0バイトより大きく、キーとなるフィールドはユニークかつ昇順でソートされていることが条件になります。

<file> が0バイトファイルの場合エラーとなります。

例(その1)

基本的な使い方

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

(file2)
0000000 50
0000003 26
0000004 40
0000009 68

(file3)
0000000 F
0000003 F
0000004 M
0000005 F

3つのファイルを連結する。

$ loopj num=1 file1 file2 file3 > data
(data)
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 オプション 補完する文字列を指定できます。

$ loopj -d@@@ num=1 file1 file2 file3 > data
$ cat data
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 あるいは
$ loopj num=1 file2 file1
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(605)[loopj] : cannot join empty file(data1).

上記の例で 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

Version and Edition

Version : Thu Jan 14 11:01:02 JST 2021

Edition : 1


© 2021 Universal Shell Programming Laboratory site