Extrahieren der Anzahl der Fehler aus einem Testbericht

Extrahieren der Anzahl der Fehler aus einem Testbericht

Wie würde ich die folgende Ausgabe analysieren vonlein test

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

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

Ich möchte die Nummer abrufen, bevor failuresich das Bash-Skript verwende.

Ich weiß nur, dass es besser ist grep,

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

Schlagen Sie mir bessere Möglichkeiten vor, dies zu tun.

Antwort1

Ihre Lösung gibt den Teil jeder Zeile zurück, der „Fehler“ bis zum ersten Leerzeichen enthält.

Wenn Sie genauer sein möchten, können Sie Folgendes tun:

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

Das heißt, berücksichtigen Sie nur die letzte Zeile ( $) und nur, wenn sie einem bestimmten Muster folgt: eine beliebige nicht leere Folge von Dezimalziffern, gefolgt von  failures(und geben Sie diese Ziffernfolge zurück).

Antwort2

An Ihrer Vorgehensweise ist nichts auszusetzen, vorausgesetzt, dass dies failuresnur in einer Zeile der Ausgabe geschieht. Eine andere Möglichkeit könnte darin bestehen, sich darauf zu verlassen, dass die Anzahl der Fehler immer in der vierten Zeile der Ausgabe steht. Dies ist sehr einfach mit awk:

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

Oder zum Ankern an einer Zeile, in der failures,sich das zweite Feld befindet:

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

Oder um in der letzten Zeile zu verankern:

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

Oder verwenden Sie sedzum Ankern in der letzten Zeile:

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

Antwort3

Mit awk (print $1, bedeutet erste Spalte):

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

Antwort4

Durch awk,

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

Und mit sedGNU

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

Oder portabel:

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

verwandte Informationen