Извлечь количество отказов из отчета об испытаниях

Извлечь количество отказов из отчета об испытаниях

Как бы я проанализировал следующий выводlein test

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

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

Мне нужно получить число перед failuresиспользованием bash-скрипта.

Я знаю только одно grep:

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

Предложите мне лучшие способы сделать это.

решение1

Ваше решение возвращает часть каждой строки, содержащую «сбои» до первого пробела.

Если вы хотите быть более конкретными, вы можете сделать следующее:

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

То есть, рассматривать только последнюю строку ( $), и только если она следует определенному шаблону: любая непустая последовательность десятичных цифр, за которой следует  failures(и возвращать эту последовательность цифр).

решение2

Нет ничего неправильного в том, как вы это делаете, при условии, что это failuresпроизойдет только в одной строке вывода. Другой вариант — закрепить тот факт, что количество отказов всегда находится в 4-й строке вывода. Это очень просто с awk:

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

Или привязаться к строке, где failures,находится второе поле:

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

Или сделать якорь на последней строке:

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

Или используйте sedякорь на последней строке:

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

решение3

С помощью awk (вывести $1, что означает первый столбец):

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

решение4

Через awk,

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

И с GNU sed,

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

Или переносимо:

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

Связанный контент