テスト番号、テスト名、シード値、状態(通過または失敗)、およびテストタイプ(mcuまたはbfm)を含む2つのファイルがあります。私が興味のある列はテスト名と状態だけです。テスト全体のサブセットであるいくつかのテストを実行し、上記の形式のログファイルを生成し、ファイルがtkdiff
同じではないため、テストステータスが変更されたかどうかを比較したいと思いました。テストサブセットと基本テストファイルの違いがあるかどうかを比較するにはどうすればよいですか? 400以上のテストがなければ、私は手で行います。
例:
サブセットテスト
|---------|------------------------------------------------------------------------------|-------|-----------|------------|
|Sr.Num |test_name |seed |Status |XDATA MASTER|
|---------|------------------------------------------------------------------------------|-------|-----------|------------|
| 1| usb3_bootrom_flex_connect| 1| PASSED| MCU|
| 2| usb3_XTAL_25MHZ_bootrom| 1| PASSED| MCU|
すべてのテストファイル
|---------|------------------------------------------------------------------------------|-------|-----------|------------|
|Sr.Num |test_name |seed |Status |XDATA MASTER|
|---------|------------------------------------------------------------------------------|-------|-----------|------------|
| 50| usb3_bootrom_flex_connect| 1| FAILED| MCU|
| 200| usb3_XTAL_25MHZ_bootrom| 1| FAILED| MCU|
結果ファイル:
usb3_bootrom_flex_connect New: PASSED Old: FAILED
usb3_XTAL_25MHZ_bootrom New: PASSED Old: FAILED
テストサブセット:https://pastebin.com/9rWAupaJ
すべてのテスト:https://pastebin.com/cVpzY8C8
サブセットテストの状態が変更されたかどうかを確認したいと思います。私がどうするかは関係ありません。 tkdiffでこれを行うことができればそうします。
ベストアンサー1
おそらくcut
tingとpingをたくさん使っgrep
て何かをすることができますが、tkdiff
単一のsed
スクリプトを使ってタスクを実行できます。
sed -n -e '3{:a' -e 'n;s/.* \([^|]*\)| *[0-9]*| *\([A-Z]*\).*/\1 \2/;H;ta}
G;s/^|[^|]*| *\([^|]*\)| *[0-9]*| *\([A-Z]*\).*\1 \([A-Z]*\).*/\1 New: \2 Old: \3/p' tests.new tests.old
最初の行は予約済みスペースに新しいテスト結果を収集し、2行目は前のテストの行を検索し、テスト名を予約済みスペース内の名前と比較し、一致する行を印刷します。
この原理の詳細については、以下を参照してください。この回答。
より大きな新しいテストファイルの場合、逆参照を含む正規表現のため、このスクリプトが遅くなる可能性があります。