我正在尝试计算 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