2つのファイルをファイル1のデータサブセットを含む2番目のファイルと比較します。

2つのファイルをファイル1のデータサブセットを含む2番目のファイルと比較します。

テスト番号、テスト名、シード値、状態(通過または失敗)、およびテストタイプ(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

おそらくcuttingと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行目は前のテストの行を検索し、テスト名を予約済みスペース内の名前と比較し、一致する行を印刷します。

この原理の詳細については、以下を参照してください。この回答

より大きな新しいテストファイルの場合、逆参照を含む正規表現のため、このスクリプトが遅くなる可能性があります。

おすすめ記事