【问题标题】:Perl deleting "blank" lines from a csv filePerl 从 csv 文件中删除“空白”行
【发布时间】:2014-07-27 19:44:13
【问题描述】:

我希望使用 Perl 删除 CSV 文件中的空白行。

我不太确定如何执行此操作,因为这些行并不完全是“空白”(它们只是一堆逗号)。

我还想将输出保存为同名文件,覆盖原始文件。

我该怎么做呢?

编辑:由于网络限制,我无法使用模块或任何源代码...

【问题讨论】:

  • 请注意,如果您可以在网络上看到一个模块,那么您可以将该模块复制并粘贴到您的代码中。无需安装模块即可使用。
  • 前几天我想到了这个问题,但由于某种原因,我从未真正研究过它是否可能......谢谢!
  • 我建议你会发现没有 any 源代码很难做到:-)

标签: perl file csv


【解决方案1】:

您可以使用简单的 Perl 单行代码来做到这一点:

perl -i -ne 'print unless /^[,\s]*$/' <filename>

-n 标志假定这个循环围绕您的程序:

while(<>) {
   print unless /^[,\s]*$/;
}

-i 标志意味着就地并修改您的输入文件。

注意:如果你担心-i会丢失你的数据,你可以指定-i.bak,perl会自动将原始文件写入你的&lt;filename&gt;.bak

【讨论】:

    【解决方案2】:

    更多的命令行技巧,

    perl -i -ne 'print if /[^,\r\n]/' file.csv
    

    【讨论】:

    • @user3707618 它进行就地编辑。执行前做好备份。
    • 不错。有什么办法可以在程序中做这样的事情吗?
    【解决方案3】:

    如果你想把它放在一个 shell 脚本中,你可以这样做......

    #!/bin/sh
    $(perl -i -n -e 'print $_ unless  ($_ =~ /^\,+$/);' $*)
    

    【讨论】:

    • 我怎样才能把它放在程序中间并让它覆盖原始文件?
    • 这就是你所追求的吗?我假设您有一个要添加此修复程序的脚本。否则你可以把 perl 放在 shebang 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    相关资源
    最近更新 更多