【问题标题】:Count number of blank lines in a file计算文件中的空白行数
【发布时间】:2012-11-10 11:06:04
【问题描述】:

count (non-blank) lines-of-code in bash 中,他们解释了如何计算非空行的数量。

但是有没有办法计算文件中的空白行数?空行是指其中有空格的行。

【问题讨论】:

    标签: unix sed grep text-files


    【解决方案1】:

    另一种方式是:

    grep -cvP '\S' file
    
    • -P '\S'(perl regex) 将匹配任何包含非空格的行
    • -v 选择不匹配的行
    • -c 打印匹配行数

    如果您的 grep 不支持 -P 选项,请使用 -E '[^[:space:]]'

    【讨论】:

    • 这很有效,与其他答案相比也非常快,所以我接受这个答案而不是另一个答案。
    • 我还在sudarmuthu.com/blog/…写了一篇博客
    • 为了方便 OSX 用户复制:grep -cvE '[^[:space:]]'
    • 在 Mac 上,使用 grep -cvE '\S' file
    • 使用 GNU grep grep -cvE '\S' filegrep -cv '\S' file 也可以。它们比-P 快还是慢,取决于硬件和grep 版本。例如。 grep 版本 2.25 和 Intel(R) Atom(TM) CPU N270 @ 1.60GHz perl 正则表达式速度较慢,而 grep 版本 2.16 和 Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz perl 正则表达式速度更快。
    【解决方案2】:

    一种使用grep的方式:

    grep -c "^$" file
    

    或者用空格:

    grep -c "^\s*$" file 
    

    【讨论】:

    • 感谢这项工作。但我会选择另一个答案,因为它非常快。
    • 我不明白为什么一个应该比另一个更快,并且想不出一种材料来测试差异,你能解释一下或给出数字吗?我确实认为两者都应该提供完全相同的效率。由于这个答案更直接,我认为这是最好的答案。另一种使用双重否定:在无空格字符上反转匹配。
    • @AdrienHorgnies 使用例如ietf.org/download/rfc-index.txt作为测试文件,使用time测量执行时间。
    • @AdrienHorgnies 另见我的回答。
    • @AdrienHorgnies grep 的实现甚至使用的硬件可能会影响命令的相对效率,正如您在我对 kev 答案的评论中看到的那样。模式的复杂程度也可能会影响它;使用一些选项而不是编写更复杂的模式可能更有效,如果选项的实现比解释模式更有效。
    【解决方案3】:

    您也可以为此使用awk

    awk '!NF {sum += 1} END {print sum}' file
    

    从手册中,“变量 NF 设置为输入记录中的字段总数”。由于默认的字段分隔符是空格,因此任何不包含任何内容或包含一些空格的行都将具有NF=0

    然后,就是计算这种情况发生了多少次了。

    测试

    $ cat a
    aa dd
    
    ddd
    
    
    he      llo
    $ cat -vet a # -vet to show tabs and spaces
    aa dd$
        $
    ddd$
       $
    ^I$
    he^Illo$
    

    现在让我们来计算空行的数量:

    $ awk '!NF {s+=1} END {print s}' a
    3
    

    【讨论】:

      【解决方案4】:

      grep -cx '\s*' file

      grep -cx '[[:space:]]*' file

      这比史蒂夫回答中的代码要快。

      【讨论】:

        【解决方案5】:

        使用 Perl 单行:

        perl -lne '$count++ if /^\s*$/; END { print int $count }' input.file
        

        【讨论】:

          【解决方案6】:
          grep -v '\S' | wc -l
          

          (在 OSX 上 Perl 表达式不可用,-P 选项)

          【讨论】:

          • 请详细说明你的解释。
          【解决方案7】:

          要计算您的同事在项目中插入了多少无用的空白行,您可以像这样启动一行命令:

          blankLinesTotal=0; for file in $( find . -name "*.cpp" ); do blankLines=$(grep -cvE '\S' ${file}); blankLinesTotal=$[${blankLines} + ${blankLinesTotal}]; echo $file" has" ${blankLines} " empty lines."  ; done; echo "Total: "${blankLinesTotal}
          

          这打印:

          <filename0>.cpp #blankLines
          ....
          ....
          <filenameN>.cpp #blankLines
          Total #blankLinesTotal
          

          【讨论】:

            猜你喜欢
            • 2020-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-12
            • 2022-07-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多