![awk e sed acrescentam final de linha a cada linha relacionada](https://rvso.com/image/1592566/awk%20e%20sed%20acrescentam%20final%20de%20linha%20a%20cada%20linha%20relacionada.png)
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 ABtest
no final da linha e depois converter de ABtest
para test
com 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 sed
e awk
você pode usar uma ferramenta. O código que atinge seu objetivo awk
pode 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 gsub
substitui 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)