我确信有很多方法可以做到这一点:如何计算文本文件中的行数?
$ <cmd> file.txt
1020 lines
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 115
标准方法是 with wc
,它接受参数来指定它应该计数的内容(字节、字符、单词等);-l
用于行:
$ wc -l file.txt
1020 file.txt
Run Code Online (Sandbox Code Playgroud)
Den*_*son 20
史蒂文 D 忘记了 GNU sed
:
sed -n '$=' file.txt
Run Code Online (Sandbox Code Playgroud)
此外,如果您想在不输出文件名的情况下进行计数并且您正在使用wc
:
wc -l < file.txt
Run Code Online (Sandbox Code Playgroud)
只是为了它:
cat -n file.txt | tail -n 1 | cut -f1
Run Code Online (Sandbox Code Playgroud)
Ste*_*n D 17
正如迈克尔所说,这wc -l
是要走的路。但是,以防万一您莫名其妙地有bash
、perl
或awk
但没有wc
,这里还有一些解决方案:
$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT
Run Code Online (Sandbox Code Playgroud)
$ perl -lne 'END { print $. }' file.txt
Run Code Online (Sandbox Code Playgroud)
而可读性要差得多:
$ perl -lne '}{ print $.' file.txt
Run Code Online (Sandbox Code Playgroud)
$ awk 'END {print NR}' file.txt
Run Code Online (Sandbox Code Playgroud)
小智 12
使用时的警告语
wc -l
Run Code Online (Sandbox Code Playgroud)
因为 wc -l 通过计数 \n 起作用,如果文件中的最后一行没有有效地以换行符结尾,则行数将减少 1。(因此旧约定在文件末尾留下换行符)
由于我永远无法确定任何给定的文件是否遵循以换行符结束最后一行的约定,因此我建议使用这些替代命令中的任何一个,这些命令将包括计数中的最后一行,而不管是否有换行符。
sed -n $= filename
perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
Run Code Online (Sandbox Code Playgroud)