awk para encontrar o padrão múltiplo em uma linha

1

Eu tenho arquivo file1.txt /file2.txt Quando executo o comando awk com pesquisa de limite entre "Digite cabeçalho call_header" e "END", imprima as linhas abaixo END também. Exemplo: -

Arquivo1.txt

Type header call_header 
abc , def , ghi , 
jkl ,mno 
END 
Define call_header 
type as call_header 

Fil2.txt

Type head call_header
data1, data2, voice ,
mms , mms2 
END
Define call_header 
type as call_header

Eu tentei:

awk '/^Type (header|head) call_header$/,/^END?$/'  {print} file1.txt

No entanto, também está imprimindo outras linhas.

Precisa apenas de dados abaixo:

Type header call_header 
abc , def , ghi , 
jkl ,mno 
END 
    
por isha 22.01.2018 / 19:46

1 resposta

2

Sua invocação de awk está incorreta:

awk '/^Type (header|head) call_header$/,/^END?$/'  {print} file1.txt

Aqui, awk procuraria por um arquivo chamado {print} .

O script inteiro deve estar entre aspas simples:

awk '/^Type (header|head) call_header$/,/^END?$/ {print}' file1.txt

Ou, em alternativa (reduzindo ligeiramente a primeira expressão regular e eliminando { print } completamente),

awk '/^Type head(er)? call_header$/,/^END?$/' file1.txt

Testado com o OpenBSD awk , mawk e GNU awk .

Com sed , isso é muito semelhante ao acima:

sed -nr '/^Type head(er)? call_header$/,/^END?$/p' file1.txt
    
por 22.01.2018 / 19:52