2つのcsvファイルを比較し、一致するデータを新しいcsvファイルに抽出します。

2つのcsvファイルを比較し、一致するデータを新しいcsvファイルに抽出します。

同様のコンテンツ/データを持つ2つのcsvファイルがあります。


ファイル1.csv

ADIS
BAP3
Mercury_System
nxh-2003
DR_FeatureUP_PT

ファイル2.csv

ADIS,projects.adis
EcoSystems,projects.ecosystems
em1xxxsw,projects.em1xxxsw
BAP3,projects.bap3
Dirana4,projects.dirana4
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DocStore,projects.docstore
DR_FeatureUP_PT,projects.dr_featureup_pt

予想される出力.csv

ADIS,projects.adis
BAP3,projects.bap3
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DR_FeatureUP_PT,projects.dr_featureup_pt

そのクエリのコマンドを教えてください。

答え1

使用ミラーmlr)は、指定されたフィールドに2つのCSVデータセットを結合しますADIS

$ mlr --csv join -j ADIS -f file1.csv file2.csv
ADIS,projects.adis
BAP3,projects.bap3
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DR_FeatureUP_PT,projects.dr_featureup_pt

ADIS実際にフィールド名ではない場合、2つのCSVファイルはヘッダなし、次のように使用します(入力をヘッダーなしのCSVに読み込み、ジョブはフィールド名の代わりにフィールド番号を使用しますjoin)。

$ mlr --csv -N join -j 1 -f file1.csv file2.csv
ADIS,projects.adis
BAP3,projects.bap3
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DR_FeatureUP_PT,projects.dr_featureup_pt

2番目のコマンドの出力そうだ最初のコマンドと同じです。ただし、各ファイルの最初の行はヘッダー行として解釈されず、データフィールドのレコードとして解釈されます。

これは、入力データファイルがDOSまたはUnixテキストファイルであるかどうかに関係なく機能します。

答え2

grepを使用してください。

grep -Ff file1.csv file2.csv > outfile.csv

awkを使う

awk -F, 'NR==FNR{seen[$0]++;next} ($1 in seen)' file1.csv file2.csv > outfile.csv

答え3

シェルで簡単なスクリプトを実行することでこの問題を解決できます。これを試してください:

while read i; do grep $i ./file2.csv >> output.csv; done < file1.csv

目的の結果を含むoutput.csvという新しいファイルが作成されます。 file1.csv、file2.csv ファイルが保存されているフォルダーで実行する必要があります。

答え4

Bash プロセス置換を使用すると、ファイルをソートして「結合」できます。

join -t, <(sort file1.csv) <(sort file2.csv) > output.csv

関連情報