我有一个包含多个重复模式的文件。 如果在每个匹配模式之间找到匹配,我想打印相关信息。
例如:
START PATTERN1 pat1
START PATTERN2 pat2
text1 0
text2 2
text3 8
text4 10
STOP PATTERN2 pat2
STOP PATTERN1 pat1
START PATTERN1 pat3
START PATTERN2 pat4
text1 0
text2 2
text3 10
text4 10
STOP PATTERN2 pat4
STOP PATTERN1 pat3
我想从START PATTERN1
开始搜索
如果我发现text3 8
存在
我需要打印pat1
和pat2
作为发生这种情况的指标。
所以我可以使用此比赛前的开始或此比赛后的停止。
但我不想做任何事情。
所以从上面的文件我会运行命令,输出将是: PAT1 PAT2
因为这是唯一包含" text3 8"内。 有什么帮助吗?
答案 0 :(得分:0)
这是你期望的吗?
awk '
$0 ~ "START PATTERN1"{l=1}
l==1 && $0 ~ /^text3 8$/{l++}
l==2 && $1 == "STOP"{print $NF}
' file
根据你的评论,只有当text3为8但
时才会打印出来$ awk '
$0 ~ "START PATTERN1"{l=1}
l==1 && $0 ~ /^text3 [^8]$/{l++}
l==2 && $1 == "STOP"{print $NF}
' file
使用perl:
$ perl -00lne '
foreach $count (1..2) {
print $1 if
/START\s+PATTERN${count}.*^text3\s+8\s*\n.*?STOP\s+PATTERN${count}\s+(\w+)/ms}
' file