计算文件中的空白行数
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' file
和 grep -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,则显示第一个参数所指向的文件中的空白行数。