인수(테스트에 소요되는 실행 시간)를 취하는 로그 파일을 구문 분석합니다.

인수(테스트에 소요되는 실행 시간)를 취하는 로그 파일을 구문 분석합니다.

로그 파일을 구문 분석하고 실행 시간이 특정 기간보다 길면 테스트 이름을 알려주어야 합니다. (사용자가 이번에 입력하게 되며 스크립트가 30분 이상 실행되었다고 가정하겠습니다.)

보안 테스트 스위트 시작
9월 5일 월요일 00:16:30 PDT 2011: 스레드 생성...
9월 5일 월요일 00:16:30 PDT 2011: 시작...
9월 5일 월요일 00:16:31 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:16:31 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/add_role_user_security.xml에 결과 쓰기
add_role_user_security.xml : 통과됨
9월 5일 월요일 00:16:31 PDT 2011: 스레드 생성...
9월 5일 월요일 00:16:31 PDT 2011: 시작...
9월 5일 월요일 00:16:32 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:16:32 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/privilege.xml에 결과 쓰기
특권.xml : 통과됨
9월 5일 월요일 00:16:32 PDT 2011: 스레드 생성...
9월 5일 월요일 00:16:32 PDT 2011: 시작...
9월 5일 월요일 00:16:32 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:16:32 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/edit_role_user.xml에 결과 쓰기
edit_role_user.xml : 통과됨
9월 5일 월요일 00:16:32 PDT 2011: 스레드 생성...
9월 5일 월요일 00:16:32 PDT 2011: 시작...
9월 5일 월요일 00:16:33 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:16:33 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/remove_roles.xml에 결과 쓰기
Remove_roles.xml : 통과됨
9월 5일 월요일 00:16:33 PDT 2011: 스레드 생성...
9월 5일 월요일 00:16:33 PDT 2011: 시작...
9월 5일 월요일 00:16:33 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:16:33 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user1.xml에 결과 쓰기
role_user1.xml : 통과됨
9월 5일 월요일 00:16:33 PDT 2011: 스레드 생성...
9월 5일 월요일 00:16:33 PDT 2011: 시작...
9월 5일 월요일 00:16:34 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:16:34 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/role_user2.xml에 결과 쓰기
bug10611.xml : 통과됨
보안 테스트 스위트
테스트 스위트 시작
9월 5일 월요일 00:18:52 PDT 2011: 스레드 생성...
9월 5일 월요일 00:18:52 PDT 2011: 시작...
9월 5일 월요일 00:18:52 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:18:52 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/setup_script.xml에 결과 쓰기
setup_script.xml : 통과됨
9월 5일 월요일 00:18:52 PDT 2011: 스레드 생성...
9월 5일 월요일 00:18:52 PDT 2011: 시작...
9월 5일 월요일 00:18:58 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:18:58 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/bug_scripts.xml에 결과 쓰기
bug_scripts.xml : 통과됨
9월 5일 월요일 00:18:58 PDT 2011: 스레드 생성...
9월 5일 월요일 00:18:58 PDT 2011: 시작...
9월 5일 월요일 00:18:58 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:18:58 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/loadtime_namespace.xml에 결과 쓰기
[심각한 오류] loadtime_namespace.xml:11:25: "[xX][mM][lL]"과 일치하는 처리 명령 대상이 허용되지 않습니다.
loadtime_namespace.xml을 구문 분석할 수 없습니다. 비교를 위해 diff 유틸리티를 실행 중입니다...
rm -f ./scripts/diffs/loadtime_namespace.xml
loadtime_namespace.xml : 통과됨
9월 5일 월요일 00:19:01 PDT 2011: 스레드 생성...
9월 5일 월요일 00:19:01 PDT 2011: 시작...
9월 5일 월요일 00:19:01 PDT 2011: 결과 보고 중...
9월 5일 월요일 00:19:01 PDT 2011: /space/builder/builds/macosx-64/HEAD/qa/scripts/results/string_script.xml에 결과 쓰기
string_script.xml : 통과됨
테스트 스위트에 대해

사용자는 스크립트에 소요된 실행 시간을 통과하여 스크립트를 실행하게 됩니다.

sh script_name.sh 60

그리고 실행하는 데 60분 이상 걸리는 테스트 목록이 있어야 합니다.

출력은 다음과 같아야 합니다.

보안 테스트 스위트 add_role_user_security.xml
보안 테스트 스위트 특권.xml
보안 테스트 스위트 Remove_roles.xml
보안 테스트 스위트 string_script.xml
fo 테스트 스위트 string_script.xml
fo 테스트 스위트 setup_script.xml

답변1

이 응답 하단의 코드는 귀하가 요청한 작업을 수행하며 귀하가 제공한 샘플을 기반으로 작동합니다.

설명:

기본적으로 두 단계로 작동합니다.

  • awk정규식과 상태 변수를 사용하여 파일과 테스트 스위트 블록 간의 전환을 결정합니다. 각 행에 테스트 스위트 이름, 테스트 파일, 시작 및 종료 시간이 있는 파이프로 구분된 목록을 출력합니다.
  • while IFS="|" read ...부분은 파이프로 구분된 출력을 가져와서 에포크 이후 타임스탬프를 초로 변환하는 데 awk사용하는 일부 변수로 읽은 date다음 차이를 계산하고 입력 값과 비교합니다.

코드는 유효성 검사 방식으로 많은 작업을 수행하지 않으므로 이를 직접 추가해야 합니다.

암호:

#!/usr/bin/sh

# Get the arguments
INPUT_FILENAME="$1"
FILTER_MINUTES="$2"

# Convert minutes to seconds
FILTER_SECONDS="$(( FILTER_MINUTES * 60 ))"

awk '
BEGIN {
    printf("%s,%s,%s,%s\n","TEST_NAME","FILENAME","START_TIME","END_TIME");
    TEST_NAME="";
    START_TIME="";
    END_TIME="";
  }
match($0, "^start (.+)$", arr) {
    TEST_NAME=arr[1];
    START_TIME="";
    END_TIME="";
    FILENAME="";
    /* printf("TEST_NAME START: %s\n", TEST_NAME); */
  }
match($0, /^(.+.xml) : (.+)$/, arr)  {
    FILENAME=sprintf("%s",arr[1]);
    printf("%s|%s|%s|%s\n",TEST_NAME,FILENAME,START_TIME,END_TIME);
    START_TIME="";
    END_TIME="";
    FILENAME="";
  }
match($0, /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) ([^\ ]+) ([0-9]{4}):.*$/, arr) {
    if(START_TIME ~ /^$/)
       START_TIME=sprintf("%s-%s-%s %s:%s:%s %s",arr[3],arr[2],arr[8],arr[4],arr[5],arr[6],arr[7]);
    else
       END_TIME=sprintf("%s-%s-%s %s:%s:%s %s",arr[3],arr[2],arr[8],arr[4],arr[5],arr[6],arr[7]);
  }
$0 ~ "^" TEST_NAME "$" {
    /* printf("TEST_NAME END: %s\n", TEST_NAME); */
    TEST_NAME="";
    START_TIME="";
    END_TIME="";
    FILENAME="";
  }
' "$INPUT_FILENAME" | while IFS="|" read TEST_NAME FILENAME START_TIME END_TIME
do
  START_TIME_SEC=$(date -d "$START_TIME" +%s)
  END_TIME_SEC=$(date -d "$END_TIME" +%s)
  ELAPSED_SEC=$((END_TIME_SEC-START_TIME_SEC))

  # No time supplied or elapsed time exceded.
  if [ -z "$FILTER_MINUTES" -o "$ELAPSED_SEC" -gt "$FILTER_SECONDS" ]
  then
    ## Remove $ELAPSED_SEC from here to not print elapsed seconds.
    echo $TEST_NAME $FILENAME $ELAPSED_SEC
  fi
done

관련 정보