【问题标题】:Explain this awk command解释这个 awk 命令
【发布时间】:2015-09-05 12:58:55
【问题描述】:

请解释一下这个awk 命令的作用:

awk '$0!~/^$/{print $0}'

【问题讨论】:

    标签: awk


    【解决方案1】:

    它删除空行。条件是$0(整行)不匹配!~正则表达式/^$/(行首紧跟行尾)。

    类似于grep -v '^$'

    【讨论】:

      【解决方案2】:

      它打印非空输入行。注意:在这种情况下,“空”并不意味着“空白”。

      【讨论】:

        【解决方案3】:

        你的例子可以简单地重写:

        awk '!/^$/'
        

        sed '/^$/d'
        

        【讨论】:

          【解决方案4】:

          就像 Ben Jackson 和其他人所说的那样,它完全删除了空行。不是具有一个或多个空格的空格,而是零字符长的空格。我们永远不会知道这是否是预期的行为。

          我想说明的是,代码至少是冗余的,甚至不是三倍冗余,这取决于它的用途。

          它的作用是将输入行打印到输出如果输入行是不是空行。

          由于 awk 的标准行为是,如果满足没有后续程序块的条件,则打印输入行,这就足够了:

          awk '$0!~/^$/' or even shorter awk '$0!=""'
          

          如果你可以确定,没有任何行会被解析为零,甚至是一个

          awk'$0'
          

          可以解决问题。

          【讨论】:

            【解决方案5】:

            先让它可读...

            echo '$0!~/^$/{print $0}' | a2p ==> $, = ' '; $\ = "\n"; 而(){ 咀嚼; 如果 ($_ !~ /^$/) { 打印 $_; } }

            还有解释。在这种情况下,不要打印空行。

            【讨论】:

            • -1。我喜欢 Perl,但“可读”在旁观者眼中。 $_$0 好吗?我认为这个答案不是很有帮助。
            猜你喜欢
            • 2013-08-26
            • 1970-01-01
            • 2012-02-12
            • 1970-01-01
            • 1970-01-01
            • 2017-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多