我有一个相当大的CSV文件(366MB),我需要在Vim中进行编辑,以便将其插入到数据库中 - 我将其更改为.txt文件以便打开。
CSV的格式为:
111111111,11,11
后面跟换行和其他记录。但在某些地方它只有:
111111111,11
表示SQL返回错误
我是否可以使用anything,anything\r\n
搜索和替换anything,anything,0\r\n
之类的内容 - 如果您了解我的意思?希望以前保持这两个值
我不知道该搜索什么,并且刚刚开始使用Vim,所以提前感谢!
答案 0 :(得分:2)
要查找其中只有一个逗号的行,请搜索无逗号,任意数字,然后搜索一个逗号,然后搜索 no comma,any编号。在Vim的正则表达式语法中,那是[^,]*,[^,]*
。它仍然需要锚定到^
和$
的整行。
现在:substitute
所有人(&
),并追加“缺失列”:
:%s/^[^,]*,[^,]*$/&,0/
瞧!
PS:还有助于处理CSV文件:csv.vim - A Filetype plugin for csv files
答案 1 :(得分:1)
我会与@Ingo Karkat的解决方案略有不同。使用相同的模式,我会找到每个匹配的行并附加“,0”而不是用自身替换整行,然后是“,0”。有两种变体:
:%s/^[^,]*,[^,]*\zs$/,0/
:g/^[^,]*,[^,]*$/s/$/,0/
在你的CSV文件上(我同意366MB算作“相当大”)你可能会注意到这三种方法中的一种比其他方法快一点。