计算文件中的空白行数

Posted

技术标签:

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

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

但是有没有办法?空行是指其中有空格的行。

【问题讨论】:

【参考方案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

【讨论】:

以上是关于计算文件中的空白行数的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script016-接受一个文件路径作为参数,如果参数个数小于 1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于 1,则显示第一个参数所指向的文件中的空白行数。

awk 表达式

脚本和算术运算的小练习

目录操作习题

Linux常用文件管理命令详解

显示 case 表达式中的空白行