awk y sed agregan el final de la línea a cada línea relacionada

awk y sed agregan el final de la línea a cada línea relacionada

Quiero manipular algunas líneas pero estoy atascado en el procesamiento línea por línea. Mi archivo se ve así:

10.10.10.10 ABtest
10.10.10.11 ABprod

Quiero agregar una cadena en cada línea de acuerdo con la cadena al final de la línea.

Mi enfoque es usar awk para probar con la cadena ABtestal final de la línea y luego convertir de ABtesta testcon sed. Después de eso, quiero agregar el resultado a cada línea relacionada.

Quiero generar lo siguiente:

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

Respuesta1

No es necesario utilizar ambos sedy awkpuede utilizar una sola herramienta. El código que logra su objetivo awkpodría 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>/busca expresiones regulares y la {<code>}parte le dice a awk qué hacer con ese registro. En este caso particular, la función gsubsustituye todas las apariciones de 'AB' en la segunda columna. Si desea simplemente sustituir la primera apariencia, use sub()pero con respecto a la expresión regular, supongo que puede usar una u otra con el mismo resultado aquí, y el resultado se imprime posteriormente.

No está claro en su pregunta si hay líneas entre las que se van a editar para imprimirlas sin modificaciones. Si ese es el caso, debes saltar al siguiente registro después de hacer coincidir y editar así:

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

Quizás deberías crear una prueba aún más específica usando if. Le recomiendo encarecidamente que consulte algunos recursos de awk (aquíoaquíPor ejemplo)

información relacionada