Previous: mbucket 件数均等化バケット分割 Up: コマンドリファレンス Next: mchgnum 数値範囲による置換 MCMD2
MCMD2 : コマンドリファレンス : mcat 併合

3.7 mcat 併合

i=パラメータで指定した全ファイルのレコードを、指定した順に併合する。 ワイルドカードでファイル名を指定した場合は、ファイル名のアルファベット順に併合される。

書式

mcat [f=] [-skip_fnf] [-nostop|-skip|-force] [i=] [o=] [-stdin] [-assert_diffSize] [-assert_nullin] [-nfn] [-nfno] [-x] [-q] [tmpPath=] [--help] [--helpl] [--version]

パラメータ

i=

入力ファイル名リストを指定する。

 

複数のファイルをカンマで区切って指定する。ワイルドカードを用いることができる。

f=

併合する項目名を指定する。

 

指定を省略すればi=で指定した1つ目のファイルの項目名が使われる。

-skip_fnf

i=で指定したファイルが存在しなくてもエラー終了しない。

 

ただし、全ファイルがなければエラーとなる。

-nostop

-nostop ,-skip,-forceは、指定の項目名がなかったときの動作を制御するフラグである。

 

-nostopは、指定の項目名がなければnullを出力する。

 

-nfnが同時に指定された場合,項目数が異なればエラー終了する。

-skip

指定の項目名がなければそのファイルは併合しない。

 

-nfnが同時に指定された場合、項目数が異なればそのファイルは併合しない。

-force

指定の項目名がなければ,項目番号で強制併合する。

 

指定の項目番号がなければnullを出力する。

-stdin

標準入力も併合する。

-add_fname

併合元のファイル名を最終項目として追加する。

 

標準入力は/dev/stdinという名称になる。

 

項目名は"fileName"固定なので、入力データに同一の項目名があるとエラーとなる。

備考

  • 複数ファイルの指定にワイルドカード("*"と"?")を利用することができる。ファイル名だけでなくディレクトリ名に対しても指定することができる。

  • ホームディレクトリ記号(~/)も利用可能。

  • 併合される順序はi=で指定したファイルの出現順。ワイルドカードを指定した場合は、アルファベット順。標準入力は最初に併合される。

利用例

例1: 同一項目名ファイルの併合

$ more dat1.csv
顧客,日付,金額
A,20081201,10
B,20081002,40
$ more dat2.csv
顧客,日付,金額
A,20081207,20
A,20081213,30
B,20081209,50
$ mcat i=dat1.csv,dat2.csv o=rsl1.csv
#END# kgcat i=dat1.csv,dat2.csv o=rsl1.csv
$ more rsl1.csv
顧客,日付,金額
A,20081201,10
B,20081002,40
A,20081207,20
A,20081213,30
B,20081209,50

例2: 項目名の異なるファイルの併合

i=の最初のファイルdat1.csvの項目「顧客,日付,金額」の3項目を併合する。 しかし、dat3.csvには「金額」項目がないので、エラーとなる。 ただし、dat1.csvの内容は既に出力されていることに注意する。

$ more dat3.csv
顧客,日付,数量
A,20081201,3
B,20081002,1
$ mcat i=dat1.csv,dat3.csv o=rsl2.csv
#ERROR# field name [金額] not found on file [dat3.csv] (kgcat)
$ more rsl2.csv
顧客,日付,金額
A,20081201,10
B,20081002,40

例3: 項目名の異なるファイルの併合2

前例に-nostopオプションを付けると、項目が見つからないデータについてはNULL値を出力するようになり、 途中でエラー終了することはなくなる。 その他にも、項目が見つからなかった場合の動作を変更するオプションとして、skip,forceがある。 詳しくはパラメータの説明を参照されたい。

$ more dat3.csv
顧客,日付,数量
A,20081201,3
B,20081002,1
$ mcat -nostop i=dat1.csv,dat3.csv o=rsl3.csv
#END# kgcat -nostop i=dat1.csv,dat3.csv o=rsl3.csv
$ more rsl3.csv
顧客,日付,金額
A,20081201,10
B,20081002,40
A,20081201,
B,20081002,

例4: 項目名を指定して併合

f=で項目名を指定すると、それら指定した項目のみを併合する。

$ mcat f=顧客,日付 i=dat2.csv,dat3.csv o=rsl4.csv
#END# kgcat f=顧客,日付 i=dat2.csv,dat3.csv o=rsl4.csv
$ more rsl4.csv
顧客,日付
A,20081207
A,20081213
B,20081209
A,20081201
B,20081002

例5: 標準入力の併合

-stdinを指定することで、dat2.csvを標準入力から追加する。

$ mcat -stdin i=dat1.csv o=rsl5.csv <dat2.csv
#END# kgcat -stdin i=dat1.csv o=rsl5.csv
$ more rsl5.csv
顧客,日付,金額
A,20081207,20
A,20081213,30
B,20081209,50
A,20081201,10
B,20081002,40

例6: ファイル名項目を追加

-add_fnameを指定すると、元ファイルの名前をfileName項目で追加する。 標準入力のファイル名は/dev/stdinとなる。

$ mcat -add_fname -stdin i=dat1.csv o=rsl6.csv <dat2.csv
#END# kgcat -add_fname -stdin i=dat1.csv o=rsl6.csv
$ more rsl6.csv
顧客,日付,金額,fileName
A,20081207,20,/dev/stdin
A,20081213,30,/dev/stdin
B,20081209,50,/dev/stdin
A,20081201,10,dat1.csv
B,20081002,40,dat1.csv

例7: ワイルドカード指定

カレントディレクトリにdat1.csv,dat2.csv,dat3.csvの3つのCSVファイルがあったとして、 それらを全て併合するのにワイルドカードdat*.csvを指定する。

$ more dat1.csv
顧客,日付,金額
A,20081201,10
B,20081002,40
$ more dat2.csv
顧客,日付,金額
A,20081207,20
A,20081213,30
B,20081209,50
$ more dat3.csv
顧客,日付,数量
A,20081201,3
B,20081002,1
$ mcat -force i=dat*.csv o=rsl7.csv
#END# kgcat -force i=dat*.csv o=rsl7.csv
$ more rsl7.csv
顧客,日付,金額
A,20081201,10
B,20081002,40
A,20081207,20
A,20081213,30
B,20081209,50
A,20081201,3
B,20081002,1

例8: 同一ファイルの複数回併合

同一ファイルを複数指定することも可能である。

$ mcat i=dat1.csv,dat1.csv,dat1.csv o=rsl8.csv
#END# kgcat i=dat1.csv,dat1.csv,dat1.csv o=rsl8.csv
$ more rsl8.csv
顧客,日付,金額
A,20081201,10
B,20081002,40
A,20081201,10
B,20081002,40
A,20081201,10
B,20081002,40

関連コマンド

msep : ちょうど逆の動きをする。

Previous: mbucket 件数均等化バケット分割 Up: コマンドリファレンス Next: mchgnum 数値範囲による置換 MCMD2