GNU/Linux >> Tutoriales Linux >  >> Linux

Trabajar con columnas:¿Awk y Sed?

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 .


Linux
  1. Extraer y mostrar datos con awk

  2. ¿Cuál es el más portátil de Sed, Awk, Perl y Sh?

  3. AWK y nombres de archivo con espacio en él.

  4. las banderas sed e y g no funcionan juntas

  5. sed reemplaza todas las pestañas y espacios con un solo espacio

Comando AWK en Linux con ejemplos

Manipulación de texto con sed y grep

Cómo eliminar líneas vacías en archivos usando Grep, Sed y Awk

Todavía trabajando con cajas de gnomos

Conceptos básicos de la línea de comandos de Linux:trabajar con archivos y directorios

¿Cómo cambiar un archivo en el lugar usando awk? (como con sed -i)