awk e sed acrescentam final de linha a cada linha relacionada

awk e sed acrescentam final de linha a cada linha relacionada

Quero fazer alguma manipulação de linha, mas estou preso no processamento linha por linha. Meu arquivo está assim:

10.10.10.10 ABtest
10.10.10.11 ABprod

Quero acrescentar uma string em cada linha de acordo com a string no final da linha.

Minha abordagem é usar o awk para testar a string ABtestno final da linha e depois converter de ABtestpara testcom sed. Depois disso, quero anexar a saída a cada linha relacionada.

Quero produzir da seguinte forma:

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

Responder1

Não há necessidade de ambos sede awkvocê pode usar uma ferramenta. O código que atinge seu objetivo awkpode ser

awk ' 
/AB/ { 
        printf $0
        gsub("^AB", "", $2)
        printf " %s\n", $2
     }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT

/<expression>/procura por regex e a {<code>}parte diz ao awk o que fazer com esse registro. Neste caso específico, a função gsubsubstitui todas as aparências de 'AB' na segunda coluna. Se você quiser apenas substituir a primeira aparência, use, sub()mas em relação à regex, acho que você pode usar um ou outro com o mesmo resultado aqui - e o resultado é impresso posteriormente.

Não está claro na sua pergunta se há alguma linha entre as linhas a serem editadas para serem impressas inalteradas. Se for esse o caso, você precisa pular para o próximo registro após combinar e editar assim:

awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT

Talvez você deva criar um teste ainda mais específico usando if. Eu recomendo fortemente que você dê uma olhada em alguns recursos do awk (aquiouaquipor exemplo)

informação relacionada