关于Linux:如何计算文档中的行数?

How to count lines in a document?

我有这样的线条,我想知道我有多少线条…

1
2
3
4
5
6
7
09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.00
09:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.00
09:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.00
09:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
09:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

有没有一种方法可以使用Linux命令来计算它们的总数?


使用wc

1
wc -l <filename>

这将输出中的行数:

1
2
$ wc -l /dir/file.txt
3272485 /dir/file.txt

或者,为了从结果中省略,使用wc -l <

1
2
$ wc -l < /dir/file.txt
3272485

您还可以将数据传输到wc

1
2
3
4
$ cat /dir/file.txt | wc -l
3272485
$ curl yahoo.com --silent | wc -l
63


要计算所有行,请使用:

1
$ wc -l file

要仅筛选和计数带图案的行,请使用:

1
$ grep -w"pattern" -c file

或者使用-v来反转匹配:

1
$ grep -w"pattern" -c -v file

请参阅grep手册页查看-e、-i和-x参数…


1
wc -l <file.txt>

1
command | wc -l

有很多方法。使用wc就是其中之一。

wc -l file

其他包括

awk 'END{print NR}' file

sed -n '$=' file(GNU-SED)

1
grep -c".*" file


在类似Unix和Unix的操作系统中,工具wc是"字数计数器",您也可以使用它来计算文件中的行数,方法是添加-l选项,因此wc -l foo将计算foo中的行数。您还可以通过管道从这样的程序输出:ls -l | wc -l,它将告诉您当前目录中有多少文件。


使用wc

1
wc -l <filename>

如果要检查目录中所有文件的总行数,可以使用find和wc:

1
find . -type f -exec wc -l {} +

如果您只需要行数(而不是行数和返回的愚蠢文件名):

1
wc -l < /filepath/filename.ext

如前所述,这些功能也可以工作(但由于其他原因较低):

1
2
3
awk 'END{print NR}' file       # not on all unixes
sed -n '$=' file               # (GNU sed) also not on all unixes
grep -c".*" file              # overkill and probably also slower


我一直在用这个:

1
cat myfile.txt | wc -l

我更喜欢它而不是接受的答案,因为它不打印文件名,而且您不必使用awk来修复它。接受的答案:

wc -l myfile.txt

但我认为最好的答案是GGB667的答案:

wc -l < myfile.txt

从现在开始我可能会用它。比我的路稍微短一点。我正在用我以前的方法来做,以防有人喜欢。这两种方法的输出是相同的。


这样使用nl

1
nl filename

来自man nl

Write each FILE to standard output, with line numbers added. With
no FILE, or when FILE is -, read standard input.


以上是首选方法,但"cat"命令也有帮助:

1
cat -n <filename>

将用行号显示文件的全部内容。


我在寻找计算多个文件行的方法时看到了这个问题,所以如果你想计算一个.txt文件的多个文件行,你可以这样做,

1
cat *.txt | wc -l

它还将在一个.txt文件上运行;)


1
wc -l file.txt | cut -f3 -d""

仅返回行数


1
cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+':仅返回数字。


重定向/通过管道将文件输出到wc -l应该足够,如下所示:

1
cat /etc/fstab | wc -l

然后只提供行数。


我知道这是旧的,但还是:计算过滤后的行数

我的文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
Number of files sent
Company 1 file: foo.pdf OK
Company 1 file: foo.csv OK
Company 1 file: foo.msg OK
Company 2 file: foo.pdf OK
Company 2 file: foo.csv OK
Company 2 file: foo.msg Error
Company 3 file: foo.pdf OK
Company 3 file: foo.csv OK
Company 3 file: foo.msg Error
Company 4 file: foo.pdf OK
Company 4 file: foo.csv OK
Company 4 file: foo.msg Error

如果我想知道发送了多少文件,可以:

1
grep"OK" <filename> | wc -l

1
grep -c"OK" filename

或使用文件名模式(例如,文件名中带有时间戳的日志文件)计算子目录中的所有行数:

1
wc -l ./**/*_SuccessLog.csv

计数行数并将结果存储在变量中使用此命令:

count=$(wc -l < file.txt) echo"Number of lines: $count"


我刚做了一个程序来做这个(和node一起)

1
2
npm install gimme-lines
gimme-lines verbose --exclude=node_modules,public,vendor --exclude_extensions=html

https://github.com/danschumann/gimme-lines/tree/master网站


正如其他人所说,wc -l是最好的解决方案,但为了将来参考,您可以使用perl:

1
perl -lne 'END { print $. }'

$.包含行号,脚本末尾将执行END块。