Estoy tratando de analizar un archivo de texto generado por una secuencia de comandos expec que
extrae información de un conmutador.
Aquí hay una salida de muestra:
192 0000.0000.0000 1/g23 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
192 0000.0000.0000 ch1 Dynamic
El archivo de texto contiene muchos otros elementos no deseados que no me interesan. Solo quiero las líneas que contienen el número de conmutador y el puerto:"1/g23" en el ejemplo anterior.
Hice un grep en el archivo para extraer las líneas que contienen el patrón '/g'
y funciona muy bien.
Ahora todo lo que quiero son las dos columnas del medio.
Usé awk para imprimir las columnas.
0000.0000.0000 1/g23
Ahora que eso está hecho, quiero deshacerme del '.'
sed funcionó bien para esto
000000000000 1/g23
Desde aquí quiero convertir solo la primera columna a un formato de dirección MAC.
So this
000000000000 1/g23
Becomes this
00:00:00:00:00:00 1/g23
Pude encontrar un comando sed que lograría esto. Pero mi problema es que solo necesito hacerlo en la primera columna. No estoy muy seguro de cómo puedo editar solo una columna y no perder la asociación entre la MAC y el puerto.
grep -e "/g" switch6output | awk '{print $2,$3}' | sed 's/.//g' | sed 's/../&:/g;s/:$//'
Estoy seguro de que es una forma realmente estúpida de hacerlo, pero fue lo mejor que se me ocurrió. ¿Hay alguna forma más confiable de lograr lo que necesito sin perder la asociación de puerto y MAC?
Gracias.
Respuesta aceptada:
Solo usa awk directamente:
awk '//g/ {
gsub(/./, "", $2)
gsub(/../, "&:", $2)
sub(/:$/, "", $2)
print $2,$3
}'
Con esta solución no necesita grep
ni sed
.