我必须按值在一列中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
我试着用
join
和awk
做些什么,但没有成功。有人能帮忙吗? 最佳答案
使用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/