我正在尝试将几个大型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
)
)
这适用于小文件,但是当文件较大时,更多命令会在每个屏幕转储结束时卡住。
尽我所能,在将其写入new.csv时,我无法获得更多直接浏览整个文件 - 任何人都可以帮忙吗?
答案 0 :(得分:4)
@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替换为:
for /f "skip=1 tokens=1* delims=:" %%i in ('findstr /n "^" %%F') do >> %newfile% echo.%%j
答案 1 :(得分:0)
这是一种不同的方法:
必须复制文件两次才有成本,但解析是使用应该快速运行的简单函数。
@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
答案 2 :(得分:0)
简单的解决方案:
进入具有.csvs:
的目录后 awk'FNR&lt; = 4&amp;&amp; NR&gt; 4 {next;} {print}'find . -type f -name '*.csv'
&gt; combined.csv
这里我假设每个csv都有4个标题行,但你可以用你想要的任何数字代替。