Extraia o número de falhas de um relatório de teste

Extraia o número de falhas de um relatório de teste

Como eu analisaria a seguinte saída delein test

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

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

Onde eu quero é obter o número antes de failuresusar o script bash.

Eu só sei que melhor é grep,

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

Sugira-me as melhores maneiras de fazer isso.

Responder1

Sua solução retorna a parte de cada linha que contém "falhas" até o primeiro caractere de espaço.

Se quiser ser mais específico, você poderia fazer:

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

Ou seja, considere apenas a última linha ( $), e somente se ela seguir um padrão específico: qualquer sequência não vazia de dígitos decimais seguida por  failures(e retorne essa sequência de dígitos).

Responder2

Não há nada de errado com a maneira como você está fazendo isso, desde que isso failuresocorra apenas em uma linha da saída. Outra opção poderia ser ancorar-se no fato de que o número de falhas está sempre na 4ª linha da saída. Isso é muito fácil com awk:

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

Ou para ancorar em uma linha onde failures,está o segundo campo:

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

Ou para ancorar na última linha:

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

Ou usando sedpara ancorar na última linha:

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

Responder3

Com awk (print $1, significa primeira coluna):

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

Responder4

Através do awk,

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

E com o GNU sed,

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

Ou portável:

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

informação relacionada