如何计算 grep 匹配后文件中的行数?

如何计算 grep 匹配后文件中的行数?

我正在尝试计算 csv 文件中有问题的行之后的行数。我知道我可以使用grep -a #语法在找到匹配项后输出 # 行数。我只对实际行数感兴趣。我意识到我可以将数字设置为 MAX_INT,将其通过管道传输到文件中并进行更多处理。

我正在寻找一个简洁的单行来告诉我计数。

有什么建议么?

答案1

{ grep -m1 match; grep -c ''; } <file

这将与 GNUgrep和一个lseek()有能力的 infile 一起工作。第一个grep将在 1 个 atch 处停止-m,第二个将-c计算输入中剩余的每一行。

没有 GNU grep

{ sed '/match/q'; grep -c ''; } <file

当然,grep除此之外,您还可以使用任何/所有其他选项,并且完全没有必要在一场比赛中停止。

答案2

这是一种方法。

$ cat foo
aaa
bbb
ccc
ddd
eee
fff
$ awk '/^ddd/{a=FNR}END{print FNR-a}' foo
2
$

答案3

另一种方法 - 使用dc有点深奥,但似乎在这里工作得很好:

sed -n '/problem/=;$=' prob.txt | dc -e '??r-p'

sed搜索prob.txt“问题”和最后一行,并使用=命令输出两者的行号。

dc将这两个值读入堆栈,反转它们,减去并打印差值。

答案4

这应该删除直到(并包括)有问题的所有行,然后计算剩余的行:

sed '1,/problem/d' data.txt | wc -l

相关内容