我有一个非常大的CSV文件,超过2.5GB,导入到sql Server 2005时,在特定的行(82,449)上给出错误消息“ Column delimiter not found ”。
问题是在这个列的文本中加双引号,在这个例子中,这是一个有人写了“ Transferred money to ""MIKE"",Thnks ”的注释字段。
由于文件太大,我无法在Notepad ++中打开它,并进行更改,这使我find了VIM。
我对VIM非常82,449 G ,我回顾了一下教程文档,它教会了如何使用82,449 G来更改文件,以find该行, l到现场,双引号。
vim-foreplay在Ruby 1.9中非常慢,而在Windows上则是Ruby 1.8
伟大的工具来查找和replace文件?
VIM问题:.swp文件存在时,是否可以添加“(D)elete”选项
如何使用cscope?
在Windows上使用VIM和Netrw进行快速search
当我使用:saveas c:Test VIMTest.csv保存文件时,它似乎是文件的一部分。 原始文件是2.6GB,新保存的是1.1GB。 原始文件有9,389,222行,新保存的有3,751,878行。 我试过使用G命令在保存之前到达文件的底部,这增加了相当大的尺寸,但仍然没有保存整个文件; 在使用G之前,文件只有230 MB。
任何想法,为什么我不保存整个文件?
按名称切换到VIM窗口
在gVim for Windows中如何编写函数或macros来发送参数给系统调用?
在Windows上,gVim中的可视化模式在Unix中不起作用
换挡locking键的作用就像换挡和换挡locking。 如何使它像使用xmodmap越狱?
我怎样才能完美地使用windows gvim下的cscope
您确实需要使用“流编辑器”,类似于Linux上的sed ,它可以让您通过管道传输文本,而无需将整个文件保存在内存中。 在sed我会做这样的事情:
sed 's/""MIKE""/"MIKE"/' < source_file_to_read > cleaned_file_to_write
有一个Windows的sed 。
作为第二选择,您可以使用像Perl,Python或Ruby这样的编程语言,从文件逐行处理文本,在搜索双引号时编写文本,然后更改相关行,然后继续编写直到文件被完全处理。
如果您的机器有足够的可用RAM,VIM可能能够加载该文件,但这将是一个缓慢的过程。 如果是这样,您可以使用以下方式从直接模式搜索:
:/""MIKE""/
:%s/""MIKE""/"MIKE"/g
:wq
在VIM中,直接模式是编辑器的正常状态,您可以使用ESC键进入该模式。
您也可以将文件分割成更小的可管理的块,然后将其合并回去。 这里是一个bash中的脚本,可以将文件拆分成相等的部分:
#!/bin/bash fspec=the_big_file.csv num_files=10 # how many mini-files you want total_lines=$(cat ${fspec} | wc -l) ((lines_per_file = (total_lines+num_files-1) / num_files)) split --lines=${lines_per_file} ${fspec} part. echo "Total Lines = ${total_lines}" echo "Lines per file = ${lines_per_file}" wc -l part.*
我只用61151570行对1GB文件进行了测试,每个结果文件几乎为100 MB
编辑:
我刚刚意识到你在Windows上,所以上面可能不适用。 你可以使用一个像简单的文本分割器一样的工具来执行相同的操作。
当您可以打开文件,比如E342: Out of memory!错误时E342: Out of memory! ,你也应该可以保存完整的文件。 至少应该有一个错误:w ,部分保存没有错误是严重的数据丢失,应该报告为bug,无论是在vim_dev邮件列表或http://code.google.com/p / VIM /问题/名单
你正在使用哪个精确版本的Vim? 在Windows 7 / x64上使用GVIM 7.3.600(32位),我无法打开一个1.9 GB的文件而没有内存不足 。 我能够从这里成功地打开,编辑和保存(全部)一个3.9 GB的文件和64位版本7.3.000。 如果你还没有使用这个原生的64位版本,请试试看。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。