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

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

次の出力をどのように解析しますか?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'

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

答え2

出力の 1 行にのみ発生するのであれば、実行方法に問題はありませんfailures。別のオプションとしては、失敗の数が常に出力の 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'

関連情報