Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 使用Vim填写CSV中缺少的列值_Search_Csv_Vim_Replace_Format - Fatal编程技术网

Search 使用Vim填写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来搜索,所以提前感谢 要查找

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

CSV的格式为:

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/