微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

batch file来分割.csv文件

我有一个非常大的.csv文件(> 500MB),我希望在命令提示符下将其分解为更小的.csv文件。 (基本上试图在Windows中find一个Linux“分裂”function“。

这必须是一个批处理脚本,因为我的机器只安装了Windows,而且请求软件是一件痛苦的事情。 我遇到了一些示例代码( http://forums.techguy.org/software-development/1023949-split-100000-line-csv-into.html ),但是,当我执行批处理时,它不起作用。 我所得到的是一个输出文件,当我请求parsing每20000行时,它只有125kb。

有没有人遇到类似的问题,你是如何解决这个问题?

使用英语进行系统调用(Windows命令提示符)

不能从Java程序中执行提示命令

批处理脚本,将所有子目录的内容复制到父目录中?

什么是`cmd / s`?

Git以Windows格式打印文件

从batch file的目录复制文件

TaskList命令在batch file中使用时挂起

命令提示符在重新启动后更

需要从32位和64位机器Windows机器上读取registry值

从Windows命令提示获取cpu使用情况

试试这个:

@echo off setLocal EnableDelayedExpansion set limit=20000 set file=export.csv set lineCounter=1 set filenameCounter=1 set name= set extension= for %%a in (%file%) do ( set "name=%%~na" set "extension=%%~xa" ) for /f "tokens=*" %%a in (%file%) do ( set splitFile=!name!-part!filenameCounter!!extension! if !lineCounter! gtr !limit! ( set /a filenameCounter=!filenameCounter! + 1 set lineCounter=1 echo Created !splitFile!. ) echo %%a>> !splitFile! set /a lineCounter=!lineCounter! + 1 )

如上面的代码所示,它将把原始的csv文件分割成多个csv文件,限制为20000行。 所有你需要做的就是改变!file! 和!limit! 相应地变化。 希望能帮助到你。

这是一个免费的Windows应用程序

http://www.addictivetips.com/windows-tips/csv-splitter-for-windows/

使用cgwin命令SPLIT。 样本 – 每500行计数一个文件:split -l 500 [filename.ext]

更多:split – 帮助

这会在newfile1.csv给你1 to 20000 newfile1.csv

并在文件newfile2.csv 20001 to the end行20001 to the end

它也克服了每行8K字符的限制。

这使用一个名为findrepl.bat的帮助器批处理文件 – https://www.dropBox.com/s/rfdldmcb6vwi9xc/findrepl.bat

将findrepl.bat放在与批处理文件相同的文件夹中或路径中。

它比一个简单的批处理文件更强大,速度也更快。

findrepl /o:1:20000 <file.csv >newfile1.csv findrepl /o:20001 <file.csv >newfile2.csv

如果分裂非常大的文件,我找到的解决方案是适应这个 ,PowerShell“嵌入”在一个批处理文件这工作很快 ,而不是我尝试的许多其他事情(我不知道其他选项张贴在这里)。

下面使用mysplit.bat的方法

mysplit.bat <mysize> 'myfile'

注:该脚本旨在使用第一个参数作为拆分大小。 目前硬编码为100Mb。 解决这个问题应该不难。

注2:电影名称应该用单引号括起来。 引用的其他替代方法显然不起作用。

注3:它以给定的字节数分割文件,而不是给定的行数。 对我来说这已经够好了。 可能会添加一些代码行来完成每个块的读取,直到下一个CR / LF。 这将完整的分割(不是一个固定的数字),而不会牺牲处理时间。

脚本mysplit.bat :

@REM Using https://stackoverflow.com/questions/19335004/how-to-run-a-powershell-script-from-a-batch-file @REM and https://stackoverflow.com/questions/1001776/how-can-i-split-a-text-file-using-powershell @PowerShell ^ $upperBound = 100MB; ^ $rootName = %2; ^ $from = $rootName; ^ $fromFile = [io.file]::OpenRead($from); ^ $buff = new-object byte[] $upperBound; ^ $count = $idx = 0; ^ try { ^ do { ^ 'Reading ' + $upperBound; ^ $count = $fromFile.Read($buff,$buff.Length); ^ if ($count -gt 0) { ^ $to = '{0}.{1}' -f ($rootName,$idx); ^ $toFile = [io.file]::OpenWrite($to); ^ try { ^ 'Writing ' + $count + ' to ' + $to; ^ $tofile.Write($buff,$count); ^ } finally { ^ $tofile.Close(); ^ } ^ } ^ $idx ++; ^ } while ($count -gt 0); ^ } ^ finally { ^ $fromFile.Close(); ^ } ^ %End PowerShell%

我在寻找类似的解决方案时发现了这个问题。 我修改了@Dale为了达到我的目的而给出的答案。 我想要一些更灵活一些,并有一些错误陷阱。 只是觉得我可以把它放在这里为任何人寻找相同的东西。

@echo off setLocal EnableDelayedExpansion GOTO checkvars :checkvars IF "%1"=="" GOTO Syntaxerror IF NOT "%1"=="-f" GOTO Syntaxerror IF %2=="" GOTO Syntaxerror IF NOT EXIST %2 GOTO nofile IF "%3"=="" GOTO Syntaxerror IF NOT "%3"=="-n" GOTO Syntaxerror IF "%4"=="" GOTO Syntaxerror set param=%4 echo %param%| findstr /xr "[1-9][0-9]* 0" >nul && ( goto proceed ) || ( echo %param% is NOT a valid number goto Syntaxerror ) :proceed set limit=%4 set file=%2 set lineCounter=1+%limit% set filenameCounter=0 set name= set extension= for %%a in (%file%) do ( set "name=%%~na" set "extension=%%~xa" ) for /f "usebackq tokens=*" %%a in (%file%) do ( if !lineCounter! gtr !limit! ( set splitFile=!name!_part!filenameCounter!!extension! set /a filenameCounter=!filenameCounter! + 1 set lineCounter=1 echo Created !splitFile!. ) cls echo Adding Line !splitFile! - !lineCounter! echo %%a>> !splitFile! set /a lineCounter=!lineCounter! + 1 ) echo Done! goto end :Syntaxerror Echo Syntax: %0 -f Filename -n "Number Of Rows Per File" goto end :nofile echo %2 does not exist goto end :end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐