uspTukubaiコマンドに関する様々な資料がここにあります。

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

ABC順リスト |  カテゴリ別リスト
動画説明

loopj

<概要>

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

<書式>

Usage   : loopj [-d<string>] num=<num> <file1> <file2> ..
Version : Sun May 14 15:06:57 JST 2017
Edition : 1

<説明>

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

<例4> 複数のキーが存在する場合

(sample1)
20160401 001 180.9
20160401 003 156.0
20170403 002 174.9
20170403 003 156.0
20180402 001 180.3
20180402 003 156.0
(sample2)
20160401 001 88.6
20160401 002 68.0
20160401 003 43.5
20170403 003 43.4
20180402 002 68.0
20180402 003 43.6
(sample3)
20160401 002 35.9
20170403 001 36.7
20170403 002 36.0
20170403 003 36.5
20180402 001 37.0
20180402 002 35.8
$ loopj -d_ num=2 sample1 sample2 sample3 | keta
20160401 001 180.9 88.6    _
20160401 002     _ 68.0 35.9
20160401 003 156.0 43.5    _
20170403 001     _    _ 36.7
20170403 002 174.9    _ 36.0
20170403 003 156.0 43.4 36.5
20180402 001 180.3    _ 37.0
20180402 002     _ 68.0 35.8
20180402 003 156.0 43.6    _

<注>

連結するファイルが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フィールドあることを保証するには、itouch
等でダミーレコードを用意してください。
$ itouch "x 0 0" data1
$ loopj num=1 data1 data2 | awk '$1 !~ /x/'
a 0 0 1
b 0 0 2
c 0 0 3