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