2015-02-27 14 views
5

dayalı katılan 2 CSV dosyaları Ben 2 CSV dosyalarını var ve BASH kullanarak bunları JOIN gerekir: dosyaları arasındaBASH: Ortak alan adı

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 

ilişki file_1.track_id = file_2.track_id olmasıdır.

Ben 3 dosya oluşturmak istiyorsanız file_3.csv aşağıdaki sütunları olacak:

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 

denedim aşağıdaki yöntemleri:

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

ve ne kadar

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

file_3.csv oluşturuldu, boş bir dosya. Bunu nasıl yapacağınıza dair herhangi bir fikir var mı?

Teşekkürler!

cevap

1

hile yapmak gerekir join komutu aşağıdaki:

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

Sadece CSV dosyaları katılmak alanları sıralanır emin olun; Her dosyada ilk alan olarak track_id olması bunu kolaylaştırır.

Her iki dosyada da test verilerini kullanmalısınız ve komutun istediğiniz şeyi yaptığından emin olduğunuzda, bunu gerçek verilere karşı çalıştırabilir ve çıkışını file_3.csv'a yönlendirebilirsiniz. Dosyalar sıralandığı sürece, çalışmaya katılmalısınız.

2

Deneyin: awk ile

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

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 içeriği:

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