我遇到需要将四个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行文本时,我遇到了麻烦(当然)。
答案 0 :(得分:2)
GnuWin,Windows的GNU(类似Unix)工具的端口集合,包含paste
,它完全符合您的要求。但是,我觉得你更喜欢原生的Windows答案而且我想出了一个,但它并不漂亮。从@walid2mi's clever solution开始并将其条带化为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
所需时间应随文件长度线性增加,避免解决方案急剧减速。但是,当所有文件没有相同数量的行时,此解决方案的故障模式并不好。通常会提示用户输入缺失的行。