Linux 에서 파일 을 다시 계산 하고 정렬 합 니 다.

5522 단어 Linux
실천
최근 에 nginx 로그 파일 에 대한 통계 가 필요 합 니 다. 몇 십 개의 파일 에 천만 줄 의 기록 을 더 하면 코드 로 쓰 는 것 은 너무 그 렇 고 메모리 도 차지 하기 때문에 Liux 명령 을 사용 하여 실현 하기 로 결 정 했 습 니 다.
대략 수 요 는 방 문 량 top 100 의 요 구 량 을 통계 하고 이 100 개의 요청 에 대한 평균 응답 시간 입 니 다.
명령 장 에 게 이렇게 쓰 십시오:
cat nginx.log_2017-10-*.bak | awk -F '|' '{print $5}' | grep '?_' | awk -F '?' '{print $1}'| sort| uniq -c | sort -k 1 -nr | head -20

위 에서 명령 에 대해 일일이 분석 해 보 겠 습 니 다.
  • awk -F '|' '{print ..}': 이 명령 은 한 줄 의 데 이 터 를 포맷 하고 나 눌 수 있 습 니 다. 그 자체 가 매우 유연 한 내용 처 리 를 지원 하고 그 자체 의 특성 도 프로 그래 밍 할 수 있 으 며 매우 강력 합 니 다. 여 기 는 한 줄 의 기록 을 '|' 로 나 누 어 다섯 번 째 부분의 내용 을 출력 할 뿐 입 니 다.
  • sort: 기본 값 으로 ASCII 에 따라 정렬 합 니 다
  • uniq -c: 인접 한 중복 기록 을 합병 하고 중복 수 를 통계 한 다 는 뜻 이다.유 닉 스 - c 는 인접 한 기록 만 합 칠 수 있 기 때문에 이 명령 을 사용 하기 전에 정렬
  • 해 야 합 니 다.
  • sort -k 1 -nr: 유 니 크 - c 처 리 를 거 친 데이터 형식 은 '2 data' 와 같 고 첫 번 째 필드 는 숫자 로 중복 되 는 기록 수 를 나타 낸다.두 번 째 필드 는 기 록 된 내용 입 니 다.우 리 는 이 내용 을 정렬 할 것 이다.sort - k 1 은 각 줄 의 첫 번 째 필드 를 정렬 하 는 것 을 표시 합 니 다. 중복 기록 수 를 나타 내 는 필드 를 말 합 니 다.sort 명령 의 기본 정렬 은 ASCII 에 따 르 기 때문에 큰 것 부터 작은 것 까지 정렬 할 때 수치 2 는 수치 11 의 앞 에 있 기 때문에 - n 매개 변 수 를 사용 하여 sort 명령 을 수치 크기 에 따라 정렬 해 야 합 니 다. -r 는 역순 을 나타 낸다. 즉, 큰 것 에서 작은 것 으로 정렬 하 는 것 이다
  • .
  • head -20: 순 서 를 배열 하고 20 행
  • 을 취한 다.
    실천 2
    JVM 을 조정 할 때 GC 로 그 를 분석 하 는데 CMS + UseParNewGC 회수 기 를 사용 하여 생 성 된 로그 에서 평균 YGC 의 시간 을 분석 해 야 합 니 다.YGC 로그 한 줄 은 다음 과 같 습 니 다:
    572.219: [GC (Allocation Failure) 572.219: [ParNew: 420082K->700K(471872K), 0.0081741 secs] 498361K->78979K(2044736K), 0.0082966 secs] [Times: user=0.02 sys=0.01, real=0.01 secs]
    

    평균 시간 을 계산 하 는데, 나 는 여기에 두 가지 명령 을 썼 는데, 하 나 는 총 수 를 구하 고, 하 나 는 총 시간 을 구 했다.
    >> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | wc -l       #   
    200
    >> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | awk -F 'secs' '{a+=$1}END{print a}'   #    
    1.53131
    

    평균 값 을 수 동 으로 계산 해 보 았 다.사실 한 줄 의 명령 으로 평균 값 을 계산 할 수도 있다.
    >> cat gc.log | grep 'Allocation' | awk -F ',' '{print $2}' | awk -F 'secs' '{a+=$1}END{print a/NR}'
    

    Liux 명령 은 매우 강력 합 니 다. 때로는 한꺼번에 파일 처 리 를 할 때 명령 처 리 를 우선 고려 할 수 있 습 니 다.
    참고 글:
  • linux sort, uniq, cut, wc 명령 상세 설명
  • awk if 문장
  • Linux 에서 계산 명령: 구 화, 평균 값 구하 기, 최고 값 구하 기
  • 좋은 웹페이지 즐겨찾기