![awk y sed agregan el final de la línea a cada línea relacionada](https://rvso.com/image/1592566/awk%20y%20sed%20agregan%20el%20final%20de%20la%20l%C3%ADnea%20a%20cada%20l%C3%ADnea%20relacionada.png)
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 ABtest
al final de la línea y luego convertir de ABtest
a test
con 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 sed
y awk
puede utilizar una sola herramienta. El código que logra su objetivo awk
podrí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 gsub
sustituye 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)