从重复模式中检索两个匹配项

从重复模式中检索两个匹配项

如何从两个重复模式中检索匹配项:mappedname及其在下面文本中的值?

MapName:abc
someDiffName=someDiffValue
x=3
y=6
NeedyMappedName=NeedyMappedValue
.
.
Flag=true

grep "MapName\|NeedyMappedName" fileName

如果我在输出awk上运行grep,它将应用于每一行,因此不会给出预期的结果。

我想得到的输出是

abc,NeedyMappedValue

如果我运行grep "MapName\|NeedyMappedName" fileName' 它会给我所需的两行。当我用awk -F ":" '{print $2}'它提取所需的值时abc,我将无法NeedyMappedValue从过滤的 grep 输出中提取第二个所需的匹配项。有没有什么方法可以通过运行awk第二行不同模式的模式来实现这一点?

答案1

我想这就是你所期望的:

grep "MapName\|NeedyMappedName" fileName | awk -F: '
/MapName/ {printf "%s,",$2}
/NeedyMappedName/ {gsub("NeedyMappedName=","");printf "%s\n",$1}'

编辑:删除不必要的 grep (感谢 Craig Sanders)

 awk -F: '
/MapName/ {printf "%s,",$2}
/NeedyMappedName/ {gsub("NeedyMappedName=","");printf "%s\n",$1}' fileName

进一步使用 awk(Solaris 上的 nawk):

awk FS=":|=" '
/MapName/ {printf "%s,",$2}
/NeedyMappedName/ {printf "%s\n",$2}' fileName

相关内容