Windows 批量合并大型CSV文件并删除重复标题
我正在尝试将几个具有相同字段的大型csv文件组合在一起。我能做的最好的事情是:Windows 批量合并大型CSV文件并删除重复标题,windows,csv,batch-file,cmd,Windows,Csv,Batch File,Cmd,我正在尝试将几个具有相同字段的大型csv文件组合在一起。我能做的最好的事情是: @echo off setlocal set first=1 for %%F in (*.csv) do ( if defined first ( type "%%F" >> new.csv set "first=" ) else ( more +1 "%%F" >> new.csv ) ) 这在小文件上非常有效,但是当文件较大时,more命令会在每个屏
@echo off
setlocal
set first=1
for %%F in (*.csv) do (
if defined first (
type "%%F" >> new.csv
set "first="
) else (
more +1 "%%F" >> new.csv
)
)
这在小文件上非常有效,但是当文件较大时,more命令会在每个屏幕转储的末尾卡住
尽管我可能会尝试,但在将整个文件写入new.csv时,我无法直接运行更多的内容-有人能帮忙吗
@ECHO OFF
SET first=y
SET newfile=new.csv
for %%F in (*.csv) do IF NOT %%F==%newfile% (
if defined first (
COPY /y "%%F" %newfile% >nul
set "first="
) else (
FOR /f "skip=1delims=" %%i IN (%%F) DO >> %newfile% ECHO %%i
)
)
编辑要支持CSV中的空行,可以将的内部替换为:
for/f“skip=1 tokens=1*delims=:”%%i in('findstr/n^“%%f”)do>%newfile%echo.%%j
编辑要支持CSV中的空行,可以将的内部替换为:
for/f“skip=1 tokens=1*delims=:“%%i in('findstr/n^“%%f”)do>%newfile%echo.%%j
这里有一种不同的方法:
@echo off
setlocal
set output=new.csv
set temp=temp.csv
copy *.csv %temp%
set /p header=<%temp%
echo %header%>%output%
findstr /v /C:"%header%" %temp%>>%output%
del %temp%
endlocal
goto :eof
@echo关闭
setlocal
设置输出=new.csv
设置temp=temp.csv
复制*.csv%temp%
设置/p标题=%output%
findstr/v/C:“%header%”%temp%>>%output%
删除%temp%
端部
后藤:eof
这里有一种不同的方法:
@echo off
setlocal
set output=new.csv
set temp=temp.csv
copy *.csv %temp%
set /p header=<%temp%
echo %header%>%output%
findstr /v /C:"%header%" %temp%>>%output%
del %temp%
endlocal
goto :eof
@echo关闭
setlocal
设置输出=new.csv
设置temp=temp.csv
复制*.csv%temp%
设置/p标题=%output%
findstr/v/C:“%header%”%temp%>>%output%
删除%temp%
端部
后藤:eof
简单解决方案:
将光盘刻录到包含.csvs的目录后:
awk'FNR4{next;}{print}{code>find-键入f-名称'*.csv'>combined.csv
在这里,我假设每个csv都有4个标题行,但您可以用您想要的任何数字替换。简单解决方案:
将光盘刻录到包含.csvs的目录后:
awk'FNR4{next;}{print}{code>find-键入f-名称'*.csv'>combined.csv
在这里,我假设每个csv都有4个标题行,但您可以用您想要的任何数字替换。+1。如果csv有空行,您应该
echo.%%i
,而不仅仅是echo%%i
。您不希望ECHO关闭。
出现在新文件中。@azhrei-FOR/F跳过空行,因此它们永远不会成为问题。如果将>%newfile%
移到ELSE的右括号后,您的代码将更高效(更快)block@dbenham-谢谢。我在写答案时遇到了回声问题。不确定那里到底发生了什么。无论如何,CSV可能有重要的空行,因此跳过空行是有问题的。@dbenham for/f完全绕过空行,但保留带空格的行。Echo需要一些非空格。+1。如果csv有空行,您应该echo.%%i
,而不仅仅是echo%%i
。您不希望ECHO关闭。
出现在新文件中。@azhrei-FOR/F跳过空行,因此它们永远不会成为问题。如果将>%newfile%
移到ELSE的右括号后,您的代码将更高效(更快)block@dbenham-谢谢。我在写答案时遇到了回声问题。不确定那里到底发生了什么。无论如何,CSV可能有重要的空行,因此跳过空行是有问题的。@dbenham for/f完全绕过空行,但保留带空格的行。Echo需要一些非空格。