「loopj」の版間の差分

提供: Personal Tukubai for Academic
ナビゲーションに移動 検索に移動
(Batch Update)
 
(Batch Update)
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
 
== 名前 ==
 
== 名前 ==
  
loopj : 複数のテキストファイルの全てのレコードを連結する。
+
loopj : 複数のテキストファイルの全てのレコードを連結する
  
 
loopj = loop of join3
 
loopj = loop of join3
14行目: 14行目:
 
== 説明 ==
 
== 説明 ==
  
引数で指定した複数のファイルを、第1フィールドから num=<n> で指定したフィールドまでをキーにして全て連結します。各ファイルの中でキーフィールドがマッチングしないレコードについては、それぞれ “0” でフィールドを補完します。
+
引数で指定した複数のファイルを、第1フィールドから num=<n> で指定したフィールドまでをキーにして全て連結します。各ファイルの中でキーフィールドがマッチングしないレコードについては、それぞれ “0” でフィールドを補完します。
  
 
連結する各ファイルは0バイトより大きく、キーとなるフィールドはユニークかつ昇順でソートされていることが条件になります。
 
連結する各ファイルは0バイトより大きく、キーとなるフィールドはユニークかつ昇順でソートされていることが条件になります。
119行目: 119行目:
  
 
© 2021 Universal Shell Programming Laboratory [https://www.usp-lab.com/ site]
 
© 2021 Universal Shell Programming Laboratory [https://www.usp-lab.com/ site]
 
  
  
 
[[Category:man]]
 
[[Category:man]]

2021年8月27日 (金) 05:50時点における最新版

名前

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