비슷한 텍스트가 있는 줄을 함께 인쇄

비슷한 텍스트가 있는 줄을 함께 인쇄

현재 애플리케이션의 성능을 분석하고 있습니다. 먼저 애플리케이션에서 생성된 로그를 검토하고 실행하는 데 허용 가능한 것보다 오래 걸리는 비즈니스 로직 작업을 식별합니다.

로그 파일의 일부는 다음과 같습니다.

2014-07-02 18:03:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35165 processed
2014-07-02 18:05:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35162 processed
2014-07-02 18:15:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35164 processed
2014-07-02 18:20:20,269 INFO  [ROOT] - Task2. xmlRecord Id :35165 processed

내 요구 사항은 각 작업을 실행하는 데 소요된 총 시간을 찾는 것입니다. 예를 들어 xmlRecord 35165의 작업 2에 소요된 시간 = xmlRecord 35165의 작업 2의 종료 시간 - xmlRecord 35165의 작업 1의 종료 시간입니다.

그래서 다음과 같이 동일한 xmlRecord ID를 가진 모든 로그 문을 그룹화하는 방법을 원합니다.

2014-07-02 18:03:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35165 processed
2014-07-02 18:20:20,269 INFO  [ROOT] - Task2. xmlRecord Id :35165 processed
2014-07-02 18:05:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35162 processed
2014-07-02 18:15:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35164 processed

위에 표시된 대로 모든 로그 문을 그룹화할 수 있으면 Task2에서 xmlRecord 35165를 처리하는 데 17분이 걸렸다는 것을 빠르게 알 수 있습니다.

여기에 표시된 로그는 내 애플리케이션에서 인쇄된 정확한 로그가 아니라 단지 예일 뿐입니다. 특정 XML ID에 대한 로그가 항상 차례로 표시되도록 모든 로그 문을 그룹화할 수 있기를 원합니다.

나는 껍질에 약간 녹슬었고 누군가가 바퀴를 재발명하는 데 시간을 낭비하지 않도록 이미 이 작업을 수행하는 라이너나 스크립트를 알려줄 수 있다면 감사하겠습니다.

답변1

초보자로서 열을 기준으로 정렬해 보는 것은 어떨까요 xmlRecord Id? :-

sort -k 9 -o <out.log> <in.log>

번호순으로 그룹화해야 합니다. 그것도 정렬하고 싶다면 스크립트나 그와 유사한 것이 Task포함될 수 있습니다 .awk

어떻게 작동하나요?

sort명령은 다양한 방법으로 데이터를 정렬할 수 있습니다. 이 경우에는 열 9의 값을 기준으로 정렬합니다. 달리 명시하지 않는 한 표준 영숫자 정렬을 사용합니다.

.... -k 9 ....

예제의 다른 매개변수는 사용할 입력 파일(로그 파일)과 결과를 -o <out.log>.

답변2

전체 파일을 로드할 만큼 메모리가 충분하다면 다음을 시도해 보세요.

$ perl -ane '
    push @h, [$F[1],(split(/:/,$F[8]))[1],$_];
    END {
        print map { $_->[2] }
              sort { $b->[1] <=> $a->[1]
                     ||
                     $a->[0] cmp $b->[0]
                   }
              @h;
    }
' file
2014-07-02 18:03:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35165 processed
2014-07-02 18:20:20,269 INFO  [ROOT] - Task2. xmlRecord Id :35165 processed
2014-07-02 18:15:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35164 processed
2014-07-02 18:05:20,269 INFO  [ROOT] - Task1. xmlRecord Id :35162 processed

설명하다

  • @h파일을 처리할 때 각 요소가 배열 참조인 배열을 만듭니다 . 각 배열 참조에는 세 가지 요소가 포함됩니다.

    • 시간은 로그 파일에 나타납니다.18:03:20,269
    • XML 레코드 ID
    • 전체 로그 항목
  • 마지막으로 다음 조건으로 결과를 인쇄합니다.

    • XML 레코드 ID를 기준으로 먼저 정렬하거나 $b->[1] <=> $a->[1]그 반대로 정렬
    • ID가 동일하면 로그에 나타나는 시간에 따라 비교합니다.$a->[0] cmp $b->[0]

관련 정보