Extraer el número de fallos de un informe de prueba

Extraer el número de fallos de un informe de prueba

¿Cómo analizaría el siguiente resultado delein test

$ lein test
lein test nepleaks-engine.core-test

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.

Lo que quiero es obtener el número antes de failuresusar el script bash.

Sólo sé que es mejor grep,

$ lein test | grep 'failures' | cut -d' ' -f1
0 

Sugiérame las mejores formas de hacer esto.

Respuesta1

Su solución devuelve la parte de cada línea que contiene "fallos" hasta el primer carácter de espacio.

Si quieres ser más específico, puedes hacer:

sed -n '$s/^\([[:digit:]]\{1,\}\) failures.*/\1/p'

Es decir, considere solo la última línea ( $), y solo si sigue un patrón específico: cualquier secuencia no vacía de dígitos decimales seguida de  failures(y devuelve esa secuencia de dígitos).

Respuesta2

No hay nada de malo en la forma en que lo hace, siempre que failuressolo ocurra en una línea de la salida. Otra opción podría ser basarse en el hecho de que el número de fallas siempre está en la cuarta línea de salida. Esto es muy fácil con awk:

lein test | awk 'NR==4 { print $1 }'

O anclar en una línea donde failures,está el segundo campo:

lein test | awk '$2=="failures," { print $1 }'

O para anclar en la última línea:

lein test | awk 'END { print $1 }'

O usando sedpara anclar en la última línea:

lein test | sed -n '$ s/^\([0-9]*\).*/\1/p'

Respuesta3

Con awk (imprime $1, significa primera columna):

lein test | grep 'failures' | awk '{print $1}'

Respuesta4

A través de awk,

lein test | awk '/ failures,/{print $1}'

Y con GNU sed,

lein test | sed -n '/ failures,/s/^\([^ ]\+\).*/\1/p'

O portátil:

lein test | sed -n '/ failures,/s/^\([^ ]\{1,\}\).*/\1/p'

información relacionada