关于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命令来计算它们的总数?

  • 使用vim打开文件,然后键入g ,它将显示行数、字数、列数和字节数。
  • @Luv33preet,然后你会发现自己又回到了原来的状态,所以,看看如何离开Vim。
  • @Skylarittner,如果您需要查看如何退出VIM,则只有 :q!是唯一的答案。(这是一个笑话,这将删除所有未保存的更改,因为如果您不知道Vim,很容易弄乱一个文件,所以最好不要保存它)。


使用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

  • 这太棒了!!您可以使用awk去掉附加到行号的文件名,例如:wc -l | awk '{print $1}
  • 再短一点,你可以做wc -l <
  • 这给了我一条额外的线然后所有的线?
  • @ggb667你也可以用cat | wc -l去掉文件名。
  • 使用watch wc -l ,您可以实时跟踪此文件。例如,这对日志文件很有用。
  • 这个答案中的所有建议实际上都不是bash答案。但是,当我们推荐其他工具时,您可以通过使用awk:awk 'END{print NR}' /dir/file.txt或sed:sed -n '$=' /dir/file.txt来避免空白。或者,如果您想要一个实际的bash解决方案,您可以在一个循环中计算文件数!while read _; do ((n++)); done < /dir/file.txt; echo $n
  • 这么简单,谢谢……我怎样才能把它写到bash脚本中的一个变量中,这样我就可以从各种文件中收集行数,然后在以后的脚本中使用这些变量。比如$linecount1(从file1.txt)和$linecount2(从file2.txt)等等????如果我想的话,我可以取变量1+变量2+变量3等的和。
  • 算了吧,wc1=$(wc-l
  • 当心,wc-l算"新线"。如果您有一个文件,其中有两行文本和一个"换行"符号,wc将输出"1"而不是"2"。
  • @user85509 wc-l给出了新行数,这可能与文件中实际的行数不同。(通常wc-l给出的行数比实际行数少1)
  • 在bash脚本中,如何将wc -l < /dir/file.txt的输出分配给变量?
  • @JovanI将使用$()运算符(evaluation)。


要计算所有行,请使用:

1
$ wc -l file

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

1
$ grep -w"pattern" -c file

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

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

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

  • 奇怪的是,有时候江户十一号〔九号〕对我来说效果更好。主要是由于wc -l恼人的"功能"填充空格前缀。


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

  • 是的,但是wc -l file提供了行数和文件名,以便获得您可以执行的文件名:filename.wc -l < /filepath/filename.ext
  • 使用gnu grep-h参数返回文件名和计数。grep -Hc".*" file


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

  • ls -l | wc -l实际上会为总大小行提供目录+1中的文件数。您可以执行ls -ld * | 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

  • 这个答案是在被问到这个问题3年后发布的,它只是在复制其他答案。第一部分是琐碎的,第二部分是幽灵狗的答案补充。Downvoting。
  • 4年…否决权。让我们看看我们是否能获得长达十年的倒票记录!
  • 不,你错了;幽灵狗的回答没有回答最初的问题。它给出了行数和文件名。要获取文件名,您可以执行以下操作:filename.wc-l


我一直在用这个:

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.

  • 这是我发现的第一个适用于一个文件的答案,该文件只有一行文本,而不是以换行结尾,wc -l报告为0。谢谢您。


以上是首选方法,但"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网站

  • 这不是像用F16来除草吗?


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

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

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

  • 不起作用:dir | perl -lne 'END { print $. }' Can't find string terminator"'" anywhere before EOF at -e line 1.'
  • @维科为我工作。如果您在Windows上,则应用不同的引用规则;但是OP询问了Linux/bash。
  • perl -lne '}{ print $. '也这样做。