我如何计算文本行?

如何计算文本文件中的行数。 例如:

command file.txt 

注意,我想只计算非空行(不计算空格和制表符的行)?

上面的答案是正确的但略有不同,你可以使用grep来更简单的代码如grep -vc '^$' file.txt

例如(A):file.txt

 $grep -vc '^$' file.txt 1 First line #This is two tabs to comment. 2 4 3 Fourth line #Another two tabs to comment. $2 

例如(B):file.txt

 $sed '/^$/d' file.txt | wc -l 1 First line #This is two tabs to comment. 2 4 3 Fourth line #Another two tabs to comment. $4 

注意结果是4! 当我们只想要两个。 但这也会计算内容和评论之间的标签。

请注意从0开始的计数,从1开始计算它与grep到sed的不同,因为我记得更多细节搜索grep或sed。

试试sed

 sed '/^$/d' file.txt | wc -l 

如果您有任何行只包含空格或制表符,并且您想要忽略它们的计数:

 sed '/^[[:blank:]]*$/d' file.txt | wc -l 

使用grep

 grep -vc '^$' file # or grep -vc '^\s*$' file 

您可以使用:

 grep -cve '^\s*$' file.txt 

如果您需要一个命令,只需.bashrc粘贴到.bashrc并重新启动shell会话或打开一个新终端:

 count_lines() { grep -cve '^\s*$' $1 } 

例:

 count_lines file.txt 42 

用awk :

 awk 'NF{++count} END{print count}' file 

说明:

NF表示字段的总数,因此打印非空白行 ,因为在非空行中NF大于0并且计算结果为真。 因此,当awk找到非空行时递增计数标志,并在END{print count}结束时打印最新的count标志值。

编辑 :您只需将c选项添加到grep而不是将所有内容添加到wc ,请参阅@ muru的答案以获得更紧凑的版本


grep

 grep -v '^$' file.txt | wc -l 

Perl解决方案

Perl可以做到这一点。 通常,计数行的作用如下:

 $ perl -ne 'END{print $.}' input.txt 

如果我们想要排除所有空行,我们将执行以下操作:

 $ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt 

假设我们有这样的输入文件

 $ cat -n input.txt 1 Cat; Dog; Squirrel 2 ORGANISM Animalus terrus 3 4 Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT 5 

共有5行,2行空行。 我们输出的命令会输出:

 $ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt 3 

多文件改进

这适用于单个文件。 如果我们想让它处理多个文件,我们可以这样做:

 $ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd 3 input.txt 52 /etc/passwd