【问题标题】:Delete empty lines in csv file删除csv文件中的空行
【发布时间】:2014-04-17 11:29:40
【问题描述】:

我有一个包含 400 万行的文件,每行都以 char $ 结尾,但是我在抓取网站时错误地在行分隔符后添加了一个新行,所以现在它看起来像这样:

fist name, last name, phone, address, postal code, city, region,$

$

fist name, last name, phone, address, postal code, city, region,$

$

当然,新行“$”只有在我使用 :set list 时才会显示,但我正在尝试将此文件用于 mysql 中的批量插入,但我现在遇到了问题。

我想把文件改成:

fist name, last name, phone, address, postal code, city, region,$

fist name, last name, phone, address, postal code, city, region,$

我该怎么做?使用 sed 或 awk 甚至 vi ?环顾四周,我发现并没有真正适用于这个案例。

请不要考虑上面显示的额外空行。

提前致谢

【问题讨论】:

    标签: linux bash sed awk vi


    【解决方案1】:

    用sed删除空行:

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

    要删除由单个 $ 组成的行:

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

    大多数版本的 sed 支持 -i 开关;如果你没有,你将需要例如sed '/^$$/d' yourfile.csv > newfile.csv.

    删除带有空格的空行更复杂。这通常有效:

    sed '/^ *$/d' yourfile.csv
    

    如果这还不够,请尝试检查选项卡。对于较旧的 sed,这将起作用:

    sed '/^[ X]*$/d' yourfile.csv
    

    X 这里是一个选项卡,通过 Control-V Tab 输入。

    较新的 sed 将采用 [ \t\r]* 或 \s* 或 [[:space:]]*,有时需要 -E 开关。

    【讨论】:

      【解决方案2】:

      grep 可以根据正则表达式匹配(或否定匹配)过滤行。排除空行:

      grep -v '^$' yourfile.csv > yourfile_fixed.csv
      

      【讨论】:

      • 感谢您的回复,我相信这应该可以!但实际上我只是发现只有前 100 行是这样的,因为我必须对前 100 个条目进行一些复制和粘贴。
      【解决方案3】:

      以下是您的选择:

      与awk:

      awk 'NF' file > tmp && mv tmp file
      

      使用sed(就地更改,因此请确保使用-i.bak 备份您的文件):

      sed -i '/^$/d' file
      

      与vi:

      :g/^$/d
      

      【讨论】:

      • 刚刚喜欢awk 'NF' 的方法!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多