BASH:根据公共字段名称加入2个CSV文件

Ang*_*nda 5 csv bash awk grep join

我有2个CSV文件,我需要使用BASH加入它们:

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
Run Code Online (Sandbox Code Playgroud)

文件之间的关系就是这样file_1.track_id = file_2.track_id.

我想创建一个file_3.csv包含以下列的第3个文件:

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
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

join -t',' -1 N -1 N file_2.csv file_1.csv >> file_3.csv
Run Code Online (Sandbox Code Playgroud)

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

虽然file_3.csv创建了gets,但它是一个空文件.关于如何做到这一点的任何想法?

谢谢!

Ant*_*ica 3

以下join命令应该可以解决问题:

join --header -t',' -j 1 file_2.csv file_1.csv
Run Code Online (Sandbox Code Playgroud)

只需确保您的 CSV 文件在连接字段上排序即可;作为 track_id每个文件中的第一个字段使这变得容易。

您应该在这两个文件中使用测试数据,当您对该命令执行您想要的操作感到满意时,您可以针对实际数据运行它并将其输出重定向到file_3.csv.