2015-02-27 13 views
5

Ich habe 2 CSV-Dateien und ich brauche sie JOIN BASH mit:BASH: Fügen 2 CSV-Dateien auf der Grundlage gemeinsamer Feldnamen

file_1.csv columns: 

track_id  
title 
song_id 
release 
artist_id 
artist_mbid 
artist_name 
duration  
artist_familiarity 
artist_hotttnesss 
year 

Sample date in file_1.csv 

TRZZZZZ12903D05E3A,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium,495.22893,0.69652442519,0.498471038842,2001 

file_2.csv columns: 

track_id  
sales_date 
sales_count 

Sample data in file_2.csv 

TRZZZZZ12903D05E3A,2014-06-19,79 

Die Beziehung zwischen den Dateien, die file_1.track_id = file_2.track_id ist.

Ich möchte file_3.csv eine dritte Datei erstellen, die die folgenden Spalten haben:

file_2.track_id,file_2.sales_date,file_2.sales_count,file_1.title,file_1.song_id,file_1.release,file_1.artist_id,file_1.artist_mbid,file_1.artist_name,file_1.duration,file_1.artist_familiarity,file_1.artist_hotttnesss,file_1.year 

Ich habe versucht, die folgenden Methoden:

join -t',' -1 N -1 N file_2.csv file_1.csv >> file_3.csv 

und

awk -F, 'NR==FNR{a[$0]=$0;next} ($1 in a){print a[$1]"," > "file_3.csv"}' file_1.csv file_2.csv 

Obwohl die file_3.csv wird erstellt, es ist eine leere Datei. Irgendwelche Ideen, wie man das macht?

Danke!

Antwort

1

Die folgende join Befehl sollte es tun:

join --header -t',' -j 1 file_2.csv file_1.csv 

So stellen Sie sicher, dass Ihre CSV-Dateien für die Join-Felder sortiert werden; mit track_id als das erste Feld in jeder Datei macht dies einfach.

Sie sollten Testdaten in beiden Dateien verwenden und wenn Sie zufrieden sind, dass der Befehl das tut, was Sie wollen, können Sie es gegen tatsächliche Daten ausführen und seine Ausgabe an file_3.csv umleiten.

2

Join sollte so lange funktionieren, wie die Dateien sortiert sind. Versuchen:

join -t, <(sort -t, -k1 file_2.csv) <(sort -t, -k1 file_1.csv) > file3.csv 
0

Mit awk

awk -F, 'NR==FNR{a[$1]=substr($0,length($1)+2);next} ($1 in a){print $0","a[$1]}' file_1.csv file_2.csv > file_3.csv 

file_3.csv Inhalt:

TRZZZZZ12903D05E3A,2014-06-19,79,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium,495.22893,0.69652442519,0.498471038842,2001 
Verwandte Themen