テストレポートから失敗回数を抽出する

テストレポートから失敗回数を抽出する

次の出力をどのように解析しますか?lein test

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

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

私が望むのは、failuresbashスクリプトを使用する前に番号を取得することです。

私はより良いものが何であるかを知っていますgrep

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

より良い方法を提案してください。

答え1

解決策は、各行から最初の空白文字までの「失敗」を含む部分を返します。

より具体的に知りたい場合は、次のようにできます。

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

つまり、最後の行($)のみが考慮され、特定のパターンに従う場合にのみ考慮されます。その後に空でない10進数のシーケンス failures(そしてその数のシーケンスが返されます)が続きます。

答え2

failuresこれが出力の1行でのみ発生する限り、これを行う方法には問題はありません。別のオプションは、失敗回数が常に出力の4行目にあるという事実に基づいています。それは簡単ですawk

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

failures,または、2番目のフィールドは次の行に固定されます。

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'

関連情報