awk o grep? – Imprimir palabra clave y las siguientes columnas

Hice algunos puntos de referencia y el resultado es un solo archivo que contiene varios resultados con el siguiente formato

[blaaa] 1st run T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 [blaaaa...] 2nd run T/V N NB P Q Time ========================== 4 42 4 1 2 1.22 

Solo quiero obtener los tiempos de ejecución de las diferentes ejecuciones que hice. Entonces, ¿es posible grep «Time» e imprimir la siguiente columna, excepto una? ¿O incluso para imprimir solo

1.02 1.22 

para mi ejemplo anterior? Preferiría imprimir solo las tres columnas de resultados sin la parte blaa: D

Comentarios

  • Te refieres a la misma columna, la siguiente menos una línea ?

Respuesta

Suponiendo Time está siempre en el sexto campo:

$ awk "$6 == "Time" {t = NR} t && NR == t+2 {print $6}" file 1.02 1.22 

Alternativamente, puede usar getline dos veces – rápido «n» sucio :

awk "$6 == "Time" {getline; getline; print $6}" file 

(«sucio» porque no «verifica el getline valor de retorno).

Comentarios

  • O use $NF si ' siempre la última columna.
  • @Kusalananda sí, buen punto

Responder

$ grep -o "Time\|[0-9\.]\+$" file Time 1.02 Time 1.22 $ grep -o "[0-9\.]\+$" file 1.02 1.22 $ grep -A2 ^T/V file T/V N NB P Q Time ========================== 2 3 4 1 2 1.02 -- T/V N NB P Q Time ========================== 4 42 4 1 2 1.22 

Los resultados están separados por -- en el último grep que se puede eliminar con:

$ grep -A2 ^T/V file | grep -v "^--" 

Y con las ==== líneas eliminadas :

$ grep -A2 ^T/V file | grep -v "^--\|=\+" 

Responder

Obtuviste dos respuestas usando awk and grep, también puede probar sed:

sed -E "/===*/{N;s/.*([0-9]+\.[0-9]*)/\1/g};t;d" file_name 

Aquí /===*/, coincidirá con ===.., luego irá a la siguiente línea y buscará números de coma flotante con decimales entre ellos, y saltará y eliminará todas las demás líneas.

Imprimirá resultados como:

1.02 1.22 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *