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

时间:2014-12-02 21:45:21

标签: batch-file csv scripting command-prompt

如果可能的话,我想将两个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

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

@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

答案 1 :(得分:0)

让我重新解释一下我的解决方案:

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

    阿贝德,阿巴斯,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A Muzefa,阿巴斯,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A TAIBA,阿巴斯,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A

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

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

  • 并取最后一栏(例如“7ae / Ma1 Mr K F TREASURE”)并将其以适当的名称添加到第一个文件中:

    阿贝德,阿巴斯,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A Muzefa,阿巴斯,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A TAIBA,阿巴斯,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A