我有一个包含如下数据的文件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