我的要求是这样的:
Read File:
If ( line contains /String1/)
{
Increment cursor by 10 lines;
If (line contains /String2/ )
{ print line; }
}
到目前为止,我得到了:
awk '/String1/{nr[NR]; nr[NR+10]}; NR in nr' file1.log
结果应输入:
awk 'match ($0 , /String2/) {print $0}' file1.log
我怎样才能实现它?有没有更好的办法? 感谢。
答案 0 :(得分:2)
你很亲密;你需要设置数组元素的值。
awk '/String1/ { linematch[NR+10]=1; } /String2/ && NR in linematch;' file1.log
每次一行与String1
匹配时,您保存记录(行号)加10.每当您匹配String2
时,检查当前行号是否是我们期望的行号,如果是,打印线。
答案 1 :(得分:2)
这是描述算法的另一种方法。而不是:
If ( line contains /String1/)
{
Increment cursor by 10 lines;
If (line contains /String2/ )
{ print line; }
}
这需要以某种方式在输入流中向前跳,将其视为:
If ( line contains /String2/)
{
If (line 10 lines previously contained /String1/ )
{ print line; }
}
只需要您重新访问已阅读的内容:
awk '/String1/{f[NR]} /String2/ && (NR-10) in f' file