将 2 个文件与包含文件 1 数据子集的第二个文件进行比较

将 2 个文件与包含文件 1 数据子集的第二个文件进行比较

我有 2 个文件,其中包含测试编号、测试名称、种子值、状态(通过或失败)和测试类型(mcu 或 bfm)。我唯一关注的两列是测试名称和状态。我运行了一些测试,这些测试是我的总测试的子集,并生成了具有上述格式的日志文件,并想要进行比较以查看测试的状态是否已更改; atkdiff不起作用,因为文件不相同。如何进行比较以查看我的测试子集与主测试文件是否存在差异?除非有 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 和grepping来执行某些操作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

第一行在保留空间中收集新的测试结果,第二行扫描旧测试的行,将测试名称与保留空间中的测试名称进行比较,并打印匹配的行。

有关该原理的详细解释,请参见这个答案

请注意,对于较大的新测试文件,由于带有反向引用的正则表达式,此脚本可能会变慢。

相关内容