Search 使用Vim填写CSV中缺少的列值
我有一个相当大的CSV文件(366MB),我需要在Vim中编辑它,以便将其插入到DB中-我将其更改为.txt文件以打开 CSV的格式为:Search 使用Vim填写CSV中缺少的列值,search,csv,vim,replace,format,Search,Csv,Vim,Replace,Format,我有一个相当大的CSV文件(366MB),我需要在Vim中编辑它,以便将其插入到DB中-我将其更改为.txt文件以打开 CSV的格式为: 111111111,11,11 然后是换行符和其他记录。但在某些地方,它只有: 111111111,11 这意味着SQL返回错误 如果你明白我的意思,有没有办法搜索并用anything,anything\r\n替换anything,anything,0\r\n?希望在之前保持这两个值 我不确定要搜索什么,而且才刚刚开始使用Vim来搜索,所以提前感谢 要查找
111111111,11,11
然后是换行符和其他记录。但在某些地方,它只有:
111111111,11
这意味着SQL返回错误
如果你明白我的意思,有没有办法搜索并用anything,anything\r\n
替换anything,anything,0\r\n
?希望在之前保持这两个值
我不确定要搜索什么,而且才刚刚开始使用Vim来搜索,所以提前感谢 要查找只有一个逗号的行,请搜索无逗号、任意数字,后跟一个逗号、无逗号、任意数字。在Vim的正则表达式语法中,这是
[^,]*,[^,]*
。它仍然需要用^
和$
锚定到整行
现在:将所有的替换为它本身(&
),并附加“缺少的列”:
瞧
PS:对处理CSV文件也很有帮助:我的做法与@Ingo Karkat的解决方案略有不同。使用相同的模式,我会找到每个匹配的行并附加“.0”,而不是将整行替换为后跟“.0”。有两种变体:
:%s/^[^,]*,[^,]*\zs$/,0/
:g/^[^,]*,[^,]*$/s/$/,0/
在您的CSV文件上(我同意366MB计算为“相当大”),您可能会注意到三种方法中的一种比其他方法快一点。谢谢,帮了大忙!幸运的是,我只需要对它们进行一次检查,但很高兴知道未来的情况!太糟糕了。我希望你能告诉我们是否有明显的区别。
:%s/^[^,]*,[^,]*\zs$/,0/
:g/^[^,]*,[^,]*$/s/$/,0/