2016-11-09 5 views
4

テストを実行した結果のファイルがあります。ファイル内の各テストの結果とラインの多くが含まれています文字列の数値を集計して1つのサマリー文字列を生成する方法

$ grep "tests," results/RunAll_unit_staging-dc1.txt 
1 tests, 2 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 7 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 2 assertions, 1 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 4 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 6 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 16 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
8 tests, 152 assertions, 0 failures, 0 errors, 0 skips 
1 tests, 3 assertions, 0 failures, 0 errors, 0 skips 
$ 

まとめた合計を持つ単一のサマリー行にこれらの行を結合する方法があれば、私は思っていました。上記の場合には、それは次のようになります。私はそうのような列に数字を生成するためにそれらをawkはでき

22 tests, 213 assertions, 1 failures, 0 errors, 0 skips 

$ grep "tests," results/RunAll_unit_staging-dc1.txt | awk '{print $1, $3, $5, $7, $9}' 
1 2 0 0 0 
1 7 0 0 0 
1 2 1 0 0 
1 3 0 0 0 
1 3 0 0 0 
1 3 0 0 0 
1 4 0 0 0 
1 6 0 0 0 
1 3 0 0 0 
1 16 0 0 0 
1 3 0 0 0 
1 3 0 0 0 
1 3 0 0 0 
8 152 0 0 0 
1 3 0 0 0 
$ 

が、私は総括するには、ここから行くことがどこか分かりません列を作成して文字列に戻します。たぶん私は間違った方向に向かっています。すべてのヘルプは

Thxを

あなたはこれを試すことができ

答えて

3

を高く評価しました。

awk '/tests/ {sum1+=$1; sum2+=$3;sum3+=$5; sum4+=$7;sum5+=$9;} END {printf "%d tests, %d assertions, %d failures, %d errors,%d skips\n" , sum1 ,sum2,sum3,sum4,sum5}' results/RunAll_unit_staging-dc1.txt 

例:

$ awk '/tests,/ {sum1+=$1; sum2+=$3;sum3+=$5; sum4+=$7;sum5+=$9;} END {printf "%d tests, %d assertions, %d failures, %d errors, %d skips\n" , sum1 ,sum2,sum3,sum4,sum5}' testFile 
22 tests, 213 assertions, 1 failures, 0 errors, 0 skips 
+0

これまでパイプラインでのgrepやawkの両方を使用する必要を使用することができませんでした。 – 123

+0

ありがとうございます。まさに私が望んでいたもの。もともと私はgrepとawkを持っていたので、どの方向を取るべきか分からなかった。パイプは、それぞれが私が望む答えを生み出すために働く出力ステップに入ります – amadain

1

はperlの

perl -lne 'while(/(\d+) (\w+)/g){$x{$2}+=$1}}{print join(", ",map{"$_ $x{$_}"}keys %x)' f 

failures 1, skips 0, errors 0, tests 22, assertions 213 
関連する問題