我如何计算文本行?
如何计算文本文件中的行数。 例如:
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