【问题标题】:How to delete all lines from a CSV file containing an exact match of a search term?如何从包含搜索词完全匹配的 CSV 文件中删除所有行?
【发布时间】:2012-04-18 11:16:05
【问题描述】:

我有一个这样的 CSV 文件:

text,0
more text,2
some more text,100

我需要删除第二列中仅包含 0 的任何行,例如,上面的输出将是:

more text,2
some more text,100

如何从 CSV 中删除完全匹配的所有行?

【问题讨论】:

    标签: bash sed awk


    【解决方案1】:

    如果这是您的最后一个字段,则 grep 可以解决问题:

    grep -v ',0$'
    

    如果没有,并且您的字段不包含 ,,请使用 awk:

    awk -F , '{if ($2!='0') print}'
    

    如果它更复杂,请使用带有 CSV 解析器的 python 或 ruby​​。

    【讨论】:

      【解决方案2】:

      一个简单的 sed 解决方案...

      sed /,0$/d
      

      【讨论】:

        【解决方案3】:

        这可能对你有用:

        awk -F, '$2' file
        

        【讨论】:

        • 请注意,这也会删除带有空$2的行
        【解决方案4】:

        如果您想对文件进行内联编辑,可以尝试以下操作。请记住在尝试任何内联编辑之前备份您的文件。 (将删除包含匹配项的行)

        sed -i "s/.*match.*//g" /yourfile.csv
        

        删除文件中的任何空白行。 (记住在尝试任何内联编辑之前备份您的文件。)

        sed -i "/^$/d" /yourfile.csv
        

        对于 OS X,您可以尝试以下操作(记住在尝试任何内联编辑之前备份您的文件。)

        sed -i '' "s/.*match.*//g" /yourfile.csv
        sed -i '' "/^$/d" /yourfile.csv
        

        【讨论】:

        • 注意:我使用了双引号,以防您在 sed 命令中使用变量。
        猜你喜欢
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-22
        相关资源
        最近更新 更多