Вы можете использовать следующий сценарий, если ваш AWK поддерживает переменную IGNORECASE
для принудительного сравнения без учета регистра. (GNU AWK, например. в Linux поддерживает это.)
Если ваш AWK не поддерживает IGNORECASE
, вы можете
/[Pp][Aa][Ss][Ss][Ee][Dd]/
вместо /passed/
и т. д. или tolower
со значением, которое необходимо сопоставить, например. tolower($0) ~ /passed/
вместо /passed/
и т. д. awk 'BEGIN { IGNORECASE=1; }
/^begin of / { print; count=1; passed=failed=0;}
/^end of / { count=0; totalcount++; if(failed)failcount++;else if(passed)passcount++;}
/passed/ && count { passed=1; }
/failed/ && count { failed=1; }
END {
print "Total testcases : " totalcount;
print "Total testcase with Success : " passcount;
print "Total testcase with Failure : " failcount; }' logfile
С помощью этого ввода (в файлеlogfile
)
Begin of A_HL_INT_GPRS_CGDSCONT_0000
Passed
foo
End of A_HL_INT_GPRS_CGDSCONT_0000
Begin of A_HL_INT_GPRS_CGDCONT_0002
bar
passed
FAILED
End of A_HL_INT_GPRS_CGDCONT_0002
Begin of foo
failed
End of bar
foo
Passed
FAILED
bar
Я получаю такой результат
Begin of A_HL_INT_GPRS_CGDSCONT_0000
Begin of A_HL_INT_GPRS_CGDCONT_0002
Begin of foo
Total testcases : 3
Total testcase with Success : 1
Total testcase with Failure : 2
Примечания:
Отредактированная версия скрипта считает passed
или failed
только один раз между строками begin of...
и end of...
, failed
имеет приоритет над passed
.
Сценарий не проверяет совпадение идентификаторов в begin of...
и end of...
.