如何从两个重复模式中检索匹配项: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