매개변수가 포함된 로그 파일 구문 분석(테스트를 실행하는 데 걸리는 시간)

매개변수가 포함된 로그 파일 구문 분석(테스트를 실행하는 데 걸리는 시간)

로그 파일을 구문 분석하고 실행 시간이 일정 시간 이상 소요되면 테스트 이름을 알려주어야 합니다(사용자는 스크립트 실행에 30분 이상 걸린다고 가정하여 이 시간을 입력하게 됩니다).

보안 테스트 스위트 시작
9월 5일 월요일 00:16:30 PDT 2011: 스레드 생성 중...
2011년 9월 5일 월요일 00:16:30 PDT: 시작...
2011년 9월 5일 월요일 00:16:31 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:16:31 PDT: 시작...
2011년 9월 5일 월요일 00:16:32 PDT: 결과 보고 중...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:16:32 PDT: 시작...
2011년 9월 5일 월요일 00:16:32 PDT: 결과 보고 중...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:16:32 PDT: 시작...
2011년 9월 5일 월요일 00:16:33 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:16:33 PDT: 시작...
2011년 9월 5일 월요일 00:16:33 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:16:33 PDT: 시작...
2011년 9월 5일 월요일 00:16:34 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:18:52 PDT: 시작...
2011년 9월 5일 월요일 00:18:52 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:18:52 PDT: 시작...
2011년 9월 5일 월요일 00:18:58 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:18:58 PDT: 시작...
2011년 9월 5일 월요일 00:18:58 PDT: 결과 보고...
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: 스레드 생성 중...
2011년 9월 5일 월요일 00:19:01 PDT: 시작...
2011년 9월 5일 월요일 00:19:01 PDT: 결과 보고...
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
보안 테스트 suiteprivilege.xml
보안 테스트 스위트 Remove_roles.xml
보안 테스트 스위트 string_script.xml
fo 테스트 스위트 string_script.xml
테스트 스위트 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

관련 정보