批处理文件 – 使用命令行将文本文件分割成较小的多个文本文件

前端之家收集整理的这篇文章主要介绍了批处理文件 – 使用命令行将文本文件分割成较小的多个文本文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有多个文本文件大约有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来修复)。

猜你在找的HTML相关文章