计算文件中的行数

Chr*_*ith 82 command-line

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

$ <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)

  • 为什么不简单地`grep -v '^+ *%' matlab.git.diff | wc -l`? (2认同)

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)

  • 或`grep -c ''`,或`tr -dc '\n' | wc -c` 或 `nl -ba -nln | tail -n 1 |sed -e 's/[^0-9].*//'`... 这些中的任何一个本身是否有用(而不是构建一个比计数更多的程序的基础)行),除了 `wc -l` 和纯 (ba)sh? (2认同)
  • @Gilles:哦,你的意思是*第一*。`uniq -c -w 0 file.txt` 并且你可以 `cut -c -7` 只保留数字。或者,更 POSIXly:`uniq -c file.txt | awk '{c+=$1}END{print c}'`。`dc` 怎么样(即使它不是 POSIX)?`uniq -c 文件.txt | 切 -c -7 | sed '$alax' | dc -e '[pq]sb[+z1=blax]sa' -`。`bc` 是 POSIX:`uniq -c file.txt | 切 -c -7 | sed -n ':a;${s/\n/ + /gp;b};N;ba' | 公元前`。如果您假设行长度有限,那么简单的答案是:`uniq -c -f 100000 file.txt`。 (2认同)

Ste*_*n D 17

正如迈克尔所说,这wc -l是要走的路。但是,以防万一您莫名其妙地有bashperlawk但没有wc,这里还有一些解决方案:

仅限 Bash

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

Perl 解决方案

$ perl -lne 'END { print $. }' file.txt
Run Code Online (Sandbox Code Playgroud)

而可读性要差得多:

$ perl -lne '}{ print $.' file.txt
Run Code Online (Sandbox Code Playgroud)

awk 解决方案

$  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)