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

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

评论

而且您也可以将awk用于基于行的简单内容...

#1 楼

如果已经将grep输出收集到一个文件中,则可以输出带有以下内容的编号列表:

cat -n myfile


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

wc -l myfile


绝对没有理由这样做:

cat myfile | wc -l


...因为我// q(cat)必须重复的O(wc)。此外,您有两个过程,其中一个就足够了。

如果要在终端上grep并在最后打印匹配项计数,可以执行以下操作:

grep whatever myfile | tee /dev/tty | wc -l


评论


请注意,wc -l filename将输出行数之外的文件名。如果只需要数字,请使用以下格式wc -l <​​filename-因为wc现在正在从stdin读取,所以没有要打印的文件名。

–格伦·杰克曼
11年11月24日在19:31

如何将wc -l <​​filename的结果保存到变量中以供以后使用?

– Sigur
2012年9月5日23:01

@Sigur:LINES = $(wc -l文件名);回声$ {LINES}

– JRFerguson
2012年9月6日下午13:00

@Sigur:我应该注意,这是POSIX语法,代替了经常看到的过时标记;即LINES = wc -l文件名。符合POSIX的现代shell支持首选的$(...),它也更容易阅读。

– JRFerguson
2012年9月6日22:06

@Chris,请参阅unix.stackexchange.com/questions/72819/…

– Shiri
17-10-31在8:41

#2 楼

-c标志将完成这项工作。例如:

 grep -c ^ filename


将计算grep返回的行。

手册页中记录的内容:


-c,--count
禁止正常输出;而是为每个输入文件打印匹配行的数量


评论


我认为^令人困惑。是您要匹配的字符串还是其他?

–安东尼奥
2015年3月3日,9:07

^不是您要匹配的字符串,而是可能在其后的字符串的位置。如果字符串被忽略,则仅与位置匹配。在这种情况下,这是一行的开始。如此有效,您就是在告诉grep数行。

– peri4n
2015年3月4日在7:59

grep -c''filename也可以解决问题。

–亚历山大·辛琴科(Alexander Zinchenko)
18年2月28日在18:22

将git log命令输出到wc -l返回错误的行数(并因此导致提交的错误数),但是grep -c ^(或grep -c $)返回正确的行数。谢谢

– Flawyte
20年6月2日在13:27

#3 楼

使用

your_command | wc -l


从手册中:

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

...

       -l, --lines
          print the newline counts


#4 楼

使用AWK计数文件中的行数

awk 'END {print NR}' filename


评论


更好,wc -l有时计数错误。

– Krishnadas PC
18/09/5在13:40在

#5 楼

您可以使用wc -l来获取行数。

示例:

$ cat foobar.txt | wc -l


评论


这是常见的外壳错误冗余猫。这样的效果是创建一个管道,执行cat文件,将其输出重定向到该管道,并执行wc -l,将其输入从管道重定向。但是您只需将wc的输入重定向为来自文件而不是管道,就可以消除“ cat”的整个调用。只需执行wc -l foobar.txt。

– Sachin Divekar
2011-11-25 18:44



#6 楼

不要使用wc:如果它不是由行号的末尾终止(至少在Mac上则不算在内),则不计算最后一行。
请改用此命令:

nbLines=$(cat -n file.txt | tail -n 1 | cut -f1 | xargs)