Estou tentando extrair os dados com base nos critérios de filtro pelo awk
comando a seguir, mas não está funcionando. Você poderia consertar isso?
awk -v RS='' -v ORS='\n\n' '/func: peak*down*HIL/' filename
Entrada:
func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_rec_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date
Saída esperada:
func: peak_some_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_HIL
sub: xyz
value: adc
log:path
close:date
func: peak_another_one_down_head_joy_HIL
sub: xyz
value: adc
log:path
close:date
O problema é a expressão regular. Você precisaria substituir cada
*
por.*
para corresponder a qualquer número de qualquer caractere entre as substrings.Cada um
*
modifica o comportamento da parte anterior da expressão, permitindo que ela corresponda zero ou mais vezes. A expressãopeak*down
corresponderia a qualquer um depeadown
,peakdown
,peakkdown
,peakkkdown
etc.Como o formato do seu arquivo é o mesmo usado pelo GNU reutils , eu pessoalmente usaria
recsel
em vez deawk
consultar (ou geralmente trabalhar com) seus dados:Muitas vezes é melhor (mais fácil, mais robusto, mais fácil de manter) usar ferramentas com conhecimento do formato de dados do que ferramentas genéricas de processamento de texto.