2

我有一种情况,我需要将四个 CSV 文件合并为一个 CSV 文件。如果我只想一个接一个地添加它们,这很容易,但我需要让它们在 CSV 文件中并排放置。我知道所有四个文件都有相同数量的条目(在 1000 个条目范围内)。我一直在研究以下代码,它适用于小文件,但对于长文件效率极低。有没有更简单的方法来完成同样的任务?

@echo off
setlocal enabledelayedexpansion
Set R=1
Set T=1
Set Y=1
Set U=1
for /f %%a in (test1.txt) do (
    set I=!R!
    for /f %%b in (test2.txt) do (
        set J=!T!
        for /f %%c in (test3.txt) do (
            set K=!Y!
            for /f %%d in (test4.txt) do (
                set L=!U!
                If !I!==!J! If !J!==!K! If !K!==!L! echo %%a,%%b,%%c,%%d >> TestComplete.txt
                Set /a U=U+1
            ) 
            Set U=1
            Set /a Y=Y+1
        )
        Set Y=1
        Set /a T=T+1
    )
    Set T=1
    Set /a R=R+1
)

注意:我知道我粘贴的代码使用的是 .txt 文件而不是 .csv 文件。我认为对一个人有用的东西对另一个人有用。

同样,只要文件很小,上面的代码似乎就可以很好地工作。当文件(在本例中为 test1.txt)有大约 1000 行文本时,我(当然)遇到了麻烦。

4

1 回答 1

2

GnuWin是 GNU(类 Unix)工具移植到 Windows 的集合,其中包含paste您想要的功能。但是,我感觉您更喜欢原生 Windows 答案,我想出了一个,但它并不漂亮。从@walid2mi 的巧妙解决方案开始并将其分解为 coljoin.bat:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%1) do (
    set /p line=
    echo !line!, %%a
)

您可以加入四个文件:

type a.txt | coljoin b.txt | coljoin c.txt | coljoin d.txt > TestComplete.txt

所需时间应随文件长度线性增加,避免您的解决方案急剧减速。但是,当所有文件的行数不相等时,此解决方案的故障模式并不好。通常会提示用户输入缺失的行。

于 2012-12-21T17:56:48.313 回答