it-swarm.cn

计算文件中的行数

我敢肯定有很多方法可以做到这一点:如何计算文本文件中的行数?

$ <cmd> file.txt
1020 lines
75
Chris Smith

标准方法是wc,它使用参数指定应计数的内容(字节,字符,单词等); -l用于行:

$ wc -l file.txt
1020 file.txt
109
Michael Mrozek

正如迈克尔所说,wc -l是要走的路。但是,以防万一您莫名其妙地拥有bashPerlawk而不是wc,以下是一些解决方案:

仅重击

$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT

Perl解决方案

$ Perl -lne 'END { print $. }' file.txt

而且可读性差得多:

$ Perl -lne '}{ print $.' file.txt

Awk解决方案

$  awk 'END {print NR}' file.txt
17
Steven D

史蒂文D忘了GNU sed

sed -n '$=' file.txt

另外,如果您希望在不输出文件名的情况下进行计数,而您正在使用wc

wc -l < file.txt

只是为了它:

cat -n file.txt | tail -n 1 | cut -f1
16

使用时的警告语

wc -l

因为wc -l通过计数\ n起作用,所以如果文件的最后一行未有效地以换行符结尾,则行数将被减1.(因此,旧的约定在文件末尾保留了换行符)

由于我无法确定是否有任何给定的文件遵循是否以换行符结束最后一行的约定,因此我建议使用这些替代命令中的任何一个,无论是否使用换行符,它们都将在计数中包括最后一行。

sed -n $= filename
Perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
11
pretzels1337

如果您只有bash并且绝对没有可用的外部工具,则还可以执行以下操作:

count=0
while read
do
  ((count=$count+1))
done <file.txt
echo $count

说明:循环逐行读取标准输入(read;由于无论如何我们都不会对读取的输入进行任何操作,因此未提供任何变量来存储它),并每次都增加变量count。由于重定向(在done之后的<file.txt),该循环的标准输入来自file.txt

3
celtschk

您始终可以按以下方式使用命令grep

grep -c "^" file.txt

它将计算file.txt的所有实际行,无论其最后一行是否在末尾包含LF字符)。

2
Paolo