我必须按值在一列中join两个文件。我需要使用unixbash
我的第一个文件如下:

user_id, song_id, timestamp
00001638d6189236866af9bbf309ae6c2347ffdc,SOBBMDR12A8C13253B,1203083335
00001638d6189236866af9bbf309ae6c2347ffdc,SOBXALG12A8C13C108,984663773
00001cf0dce3fb22b0df0f3a1d9cd21e38385372,SODDNQT12A6D4F5F7E,1275071044
00001cf0dce3fb22b0df0f3a1d9cd21e38385372,SODDNQT12A6D4F5F7E,1097509573

第二个文件:
user_id, natural_key
00000b722001882066dff9d2da8a775658053ea0,6944471
00001638d6189236866af9bbf309ae6c2347ffdc,19309784
0000175652312d12576d9e6b84f600caa24c4715,10435505
00001cf0dce3fb22b0df0f3a1d9cd21e38385372,5232769

当然,两个文件都有更多的行。我想按第一列(用户id)同时join两个文件并得到以下结果:
natural_key, song_id, timestamp
19309784,SOBBMDR12A8C13253B,1203083335
19309784,SOBXALG12A8C13C108,984663773
5232769,SODDNQT12A6D4F5F7E,1275071044
5232769,SODDNQT12A6D4F5F7E,1097509573

我试着用joinawk做些什么,但没有成功。有人能帮忙吗?

最佳答案

使用GNU join、sed、sort和bash:

echo "natural_key, song_id, timestamp"
join -t, <(sed '1d' file1 |sort -t, -k1,1) <(sed '1d' file2 | sort -t, -k1,1) -o 2.2,1.2,1.3

输出:
自然键,歌曲id,时间戳
19309784,SOBBMDR12A8C13253B1203083335
19309784,Sobxalg12a8c13c108984663773
5232769,地址:SODDNQT12A6D4F5F7E,1097509573
5232769,SODDNQT12A6D4F5F7E,1275071044

关于bash - 在bash中加入两个csv文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43551686/

10-14 18:32
查看更多