테스트 번호, 테스트 이름, 시드 값, 상태(통과 또는 실패) 및 테스트 유형(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
첫 번째 줄은 예약된 공간에 새 테스트 결과를 수집하고, 두 번째 줄은 이전 테스트에 대한 행을 검색하고, 테스트 이름을 예약된 공간에 있는 이름과 비교하고, 일치하는 줄을 인쇄합니다.
이 원리에 대한 자세한 설명은 다음을 참조하세요.이 답변.
더 큰 새 테스트 파일의 경우 역참조가 포함된 정규식으로 인해 이 스크립트가 느려질 수 있습니다.