如何使用常用工具计算文件的行数?

147 grep files

我将grep结果重定向到一个文件,然后cat用于在屏幕上显示其内容。我想知道我的结果文件中有多少行结果,然后将其添加到某个计数器中。

最好的方法是什么?任何相关标志grepcat

JRF*_*son 178

如果您已经收集了 grep在文件中输出,您可以输出一个编号列表:

cat -n myfile
Run Code Online (Sandbox Code Playgroud)

如果您只想要行数,只需执行以下操作:

wc -l myfile
Run Code Online (Sandbox Code Playgroud)

绝对没有理由这样做:

cat myfile | wc -l
Run Code Online (Sandbox Code Playgroud)

...因为这会不必要地执行 I/O( catwc必须重复的 ) 。此外,您有两个进程,一个就足够了。

如果您想grep在终端上打印匹配数,您可以执行以下操作:

grep whatever myfile | tee /dev/tty | wc -l
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`wc -l filename` 将输出文件名和行数。如果您只需要数字,请使用这种形式`wc -l <​​ filename` -- 因为 wc 现在正在从 stdin 读取,所以没有要打印的文件名。 (20认同)
  • @Sigur : LINES=$(wc -l 文件名); 回声 ${LINES} (2认同)

per*_*i4n 76

-c标志将做的工作。例如:

 grep -c ^ filename
Run Code Online (Sandbox Code Playgroud)

将计算返回的行数grep

记录在 手册页中记录

-c, --count 抑制正常输出;而是打印每个输入文件的匹配行数

  • `^` 不是您要匹配的字符串,而是可能跟随的字符串的位置。如果字符串被遗漏,它只匹配位置。在这种情况下,这是一行的开始。如此有效地,您告诉 `grep` 计算行数。 (3认同)
  • 我认为“^”令人困惑。这是您要匹配的字符串还是其他字符串? (2认同)
  • `grep -c '' filename` 也可以解决这个问题。 (2认同)
  • 将 git log 命令输出通过管道传送到 `wc -l` 返回了错误的行数(因此也返回了错误的提交数),但 `grep -c ^` (或 `grep -c $`)返回了正确的数字。谢谢 (2认同)

小智 22

your_command | wc -l
Run Code Online (Sandbox Code Playgroud)

从手册:

NAME
       wc - print newline, word, and byte counts for each file

...

       -l, --lines
          print the newline counts
Run Code Online (Sandbox Code Playgroud)


小智 5

使用 AWK 计算文件中的行数

awk 'END {print NR}' filename
Run Code Online (Sandbox Code Playgroud)