我将
grep
的结果重定向到一个文件,然后使用cat
在屏幕上显示其内容。我想知道结果文件中有多少行结果,然后将其添加到计数器中。最好的方法是什么?与
grep
或cat
相关的任何标志吗?#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)
评论
而且您也可以将awk用于基于行的简单内容...