Recuperando duas correspondências do padrão repetido

2

Como posso recuperar correspondências de dois padrões repetidos: mappedname & seu valor no texto abaixo?.

MapName:abc
someDiffName=someDiffValue
x=3
y=6
NeedyMappedName=NeedyMappedValue
.
.
Flag=true
grep "MapName\|NeedyMappedName" fileName

Se eu executar awk na saída grep , ela será aplicada a cada linha, portanto, não fornecerá o resultado esperado.

A saída que eu gostaria de obter é

abc,NeedyMappedValue

Se eu executar grep "MapName\|NeedyMappedName" fileName ', isso me fornecerá as duas linhas necessárias. E quando eu extrair os valores necessários com awk -F ":" '{print $2}' , isso gerará abc & Não será possível extrair a segunda correspondência necessária, NeedyMappedValue da saída grep filtrada. Existe alguma maneira de conseguir isso executando awk com algum padrão com um padrão diferente para a segunda linha?

    
por user1587504 30.09.2013 / 07:38

1 resposta

3

Eu acho que é o que você espera:

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

Editar: removendo o grep desnecessário (graças a Craig Sanders)

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

e indo um pouco mais longe com o awk (nawk no Solaris):

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