【问题标题】:Fill in missing column values in CSV using Vim使用 Vim 填充 CSV 中缺失的列值
【发布时间】:2014-02-01 17:22:26
【问题描述】:

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

CSV 格式为:

111111111,11,11

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

111111111,11

SQL返回错误的意思

有没有办法可以搜索并用anything,anything,0\r\n 替换anything,anything\r\n 之类的东西 - 如果你明白我的意思吗?希望之前保持这两个值 我不知道要搜索什么,只是刚刚开始使用 Vim,所以提前致谢!

【问题讨论】:

    标签: search csv vim replace format


    【解决方案1】:

    要查找其中只有一个逗号的行,请搜索 no comma, any number,然后是一个 comma,然后是 no comma, any号码。在 Vim 的正则表达式语法中,它是 [^,]*,[^,]*。它仍然需要用^$ 将其锚定

    现在:substitute所有那些自己(&),并附加“缺失的列”:

    :%s/^[^,]*,[^,]*$/&,0/
    

    瞧!

    PS:也有助于处理 CSV 文件:csv.vim - A Filetype plugin for csv files

    【讨论】:

    • 谢谢,帮了大忙!
    【解决方案2】:

    我的做法与@Ingo Karkat 的解决方案略有不同。使用相同的模式,我会找到每个匹配的行并附加“,0”,而不是用自身替换整行,然后是“,0”。有两种变体:

    :%s/^[^,]*,[^,]*\zs$/,0/
    :g/^[^,]*,[^,]*$/s/$/,0/
    

    在您的 CSV 文件中(我同意 366MB 算作“相当大”),您可能会注意到这三种方法中的一种比其他方法快一点。

    【讨论】:

    • 幸运的是,我只需要检查一次,但很高兴知道未来!
    • 太糟糕了。我希望你能告诉我们是否有明显的不同。
    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2015-10-06
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多