合并 CSV 文件数据批处理脚本



如果可能的话,我想用批处理脚本合并两个 CSV 文件的数据。

问题是,尽管它们包含类似的数据,但它并不有序,需要合并/合并。我只想看到这个文件的最后一列

Isher,Dhupar,7,7M5,7ae/Ma1   Mr K F TREASURE
Saarah,Hassan,7,7M5,7ae/Ma1   Mr K F TREASURE
Zenzele,Kabara-Clarke,7,7M5,7ae/Ma1   Mr K F TREASURE

添加到此文件的下一行,它是正确的人。

Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A
Muzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A
Taiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A

即它将进行以下转换:

Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A,7ae/Ma1   Mr K F TREASURE
Muzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A,8fj/Ma1   Mrs C H CLARK
Taiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A,11ae/Ma1   Mr K F TREASURE

我已经设法构建了一个批处理文件,该文件读取第二个 CSV 文件中的前两个字段并存储到一个数组中,但仅此而已:

@echo off
setlocal enableextensions enabledelayedexpansion
set n=0
for /f "tokens=1,2 delims=," %%a in (Database.csv) do (
    set names[!n!]=%%a,%%b
    set /a n+=1
)
set /a n-=1
for /l %%f in (0,1,%n%) do (
    echo !names[%%f]!
)
endlocal

提前感谢!

哇!您应该意识到示例数据通常用于澄清问题,因此读者可以轻松地遵循查看示例的问题描述。但是,在这种情况下,您的示例只会分散我们对描述的注意力,因为没有一个"正确的人"匹配数据的情况!无论如何,这是一个解决方案(当我猜测正确的数据应该如何时):

@echo off
setlocal EnableDelayedExpansion
rem Load the field 5 from file1.txt in an array that uses the first two fields as index
for /F "tokens=1,2,5 delims=," %%a in (file1.txt) do set "field5[%%a,%%b]=%%c"
rem Process the file2.txt and insert the field5 of the matching data
for /F "tokens=1,2* delims=," %%a in (file2.txt) do echo %%a,%%b,%%c,!field5[%%a,%%b]!

这样,如果这是第一个文件:

Abed,Abbas,7,7M5,7ae/Ma1   Mr K F TREASURE
Muzefa,Abbas,7,7M5,8fj/Ma1   Mrs C H CLARK
Taiba,Abbas,7,7M5,11ae/Ma1   Mr K F TREASURE

那么这是输出:

Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A,7ae/Ma1   Mr K F TREASURE
Muzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A,8fj/Ma1   Mrs C H CLARK
Taiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A,11ae/Ma1   Mr K F TREASURE

让我改写一下我的解决方案:

  • 将所有名称存储在以下文件中的数组中:

    Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,Abedabbas,****,AMuzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,ATaiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A

  • 使用下面文件中数组中的每个名称进行搜索

    伊舍尔,杜帕尔,7,7M5,7ae/Ma1 K F 宝藏先生萨拉,哈桑,7,7M5,7ae/Ma1 K F 宝藏先生曾泽勒,卡巴拉-克拉克,7,7M5,7ae/Ma1 K先生 F 宝藏

  • 并取最后一列(例如"7ae/Ma1 K F Treasure先生")并将其添加到第一个文件中的适当名称:

    Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,Abedabbas,****,AMuzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,ATaiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A

最新更新