将索引文件中的匹配列添加到 csv

将索引文件中的匹配列添加到 csv

我有一个包含如下数据的文件index.txt

2013/10/13-121 f19f26f09691c2429cb33456cf64f867
2013/10/17-131 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106 0f7082e2bb7224aad0bd7a6401532f56
2013/10/10-129 33f7592a4ad22f9f6d63d6a17782d023
......

第二个 CSV 格式的文件包含如下数据:

2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965
2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965

现在我需要一个解决方案,当 ID(第一列)与索引文件中匹配时,在 CSV 末尾添加 MD5SUM ,反之亦然,因此文件最后应如下所示:

2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, f19f26f09691c2429cb33456cf64f867
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 0f7082e2bb7224aad0bd7a6401532f56
2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 33f7592a4ad22f9f6d63d6a17782d023

答案1

用命令试试join

join  <(sort file1.csv | sed 's/$/,/g') <(sort index.txt | sed 's/ /, /g')

2013/10/10-129, DLXDAE, 15:33, 18:46, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 33f7592a4ad22f9f6d63d6a17782d023
2013/10/13-121, DLDFWSXDR, 15:33, 18:21, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, f19f26f09691c2429cb33456cf64f867
2013/10/17-131, DLDFWXDR, 11:05, 15:08, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 583d3936c814c1bf4e663fe1688fe4a3
2013/10/20-106, DLSDXDR, 12:08, 13:06, Normal, No, 5F2B0121-4F2B-481D-B79F-2DC827B85093/22551965, 0f7082e2bb7224aad0bd7a6401532f56
  • sort t1 | sed 's/$/,/g'对 file1.csv 进行排序并以逗号作为后缀。
  • sort t2 | sed 's/ /, /g'对index.txt进行排序并替换分隔符
  • 然后使用连接命令(默认为第一个字段)。

答案2

使用awk而不对任何文件进行排序:

awk 'NR==FNR{a[$1]=$2;next}{$(NF+1)=a[$1]}1' index.txt FS=', ' OFS=', ' file.csv

第一个块语句允许将第一个文件index.txt复制到数组中a

如果键(文件的第一个字段)是数组的一部分,则第二个块语句将数组的内容附加到a文件行的末尾。file.csv

答案3

还可以尝试 - 如果第一个和第二个文件中的 ID 不同 - :

awk 'NR == FNR {S[$1] = $2; next} {print $0 FS " " S[$1]}' file1 FS="," file2

相关内容