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=で指定したファイルの出現順。ワイルドカードを指定した場合は、アルファベット順。標準入力は最初に併合される。
$ 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
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
前例に-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,
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
-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
-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
カレントディレクトリに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
同一ファイルを複数指定することも可能である。
$ 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 : ちょうど逆の動きをする。