同様のコンテンツ/データを持つ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