我有多个文本文件大约有10万行,我想把它们拆分成更小的文本文件,每行5000行。
我用了:
split -l 5000 filename.txt
创建文件:
xaa xab aac xad xbe aaf
没有扩展名的文件我只想打电话给他们:
file01.txt file02.txt file03.txt file04.txt
或者如果不可能,我只是希望他们拥有“.txt”扩展名。
解决方法
@ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir" SET /a fcount=100 SET /a llimit=5000 SET /a lcount=%llimit% FOR /f "usebackqdelims=" %%a IN ("%sourcedir%\q25249516.txt") DO ( CALL :select FOR /f "tokens=1*delims==" %%b IN ('set dfile') DO IF /i "%%b"=="dfile" >>"%%c" ECHO(%%a ) GOTO :EOF :select SET /a lcount+=1 IF %lcount% lss %llimit% GOTO :EOF SET /a lcount=0 SET /a fcount+=1 SET "dfile=%sourcedir%\file%fcount:~-2%.txt" GOTO :EOF
这是一个本机Windows批处理,应该完成任务。
现在我不会说它会很快(每个5Kline输出文件不到2分钟),或者它会免受批量字符敏感。真的取决于你的目标数据的特点。
我使用一个名为q25249516.txt的文件,其中包含100K线的数据用于我的测试。
修改更快版本
REM
@ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir" SET /a fcount=199 SET /a llimit=5000 SET /a lcount=%llimit% FOR /f "usebackqdelims=" %%a IN ("%sourcedir%\q25249516.txt") DO ( CALL :select >>"%sourcedir%\file$$.txt" ECHO(%%a ) SET /a lcount=%llimit% :select SET /a lcount+=1 IF %lcount% lss %llimit% GOTO :EOF SET /a lcount=0 SET /a fcount+=1 MOVE /y "%sourcedir%\file$$.txt" "%sourcedir%\file%fcount:~-2%.txt" >NUL 2>nul GOTO :EOF
请注意,我使用了50000的llimit进行测试。如果llimit * 100比文件中的行数更多,则会覆盖早期文件编号(通过将fcount设置为1999并在文件重命名行中使用〜3代替〜2来修复)。