使用Vim在CSV中填写缺少的列值

时间:2014-02-01 17:22:26

标签: search csv vim replace format

我有一个相当大的CSV文件(366MB),我需要在Vim中进行编辑,以便将其插入到数据库中 - 我将其更改为.txt文件以便打开。

CSV的格式为:

111111111,11,11

后面跟换行和其他记录。但在某些地方它只有:

111111111,11

表示SQL返回错误

我是否可以使用anything,anything\r\n搜索和替换anything,anything,0\r\n之类的内容 - 如果您了解我的意思?希望以前保持这两个值 我不知道该搜索什么,并且刚刚开始使用Vim,所以提前感谢!

2 个答案:

答案 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算作“相当大”)你可能会注意到这三种方法中的一种比其他方法快一点。