쉘 스크립트의 요약 통계

쉘 스크립트의 요약 통계

여러 디렉터리에 여러 파일(레코드)이 있습니다. 각 레코드는 생성 날짜를 기준으로 자체 경로에 있습니다.

예를 들어 2016년 11월 12일의 기록은 다음과 같습니다.

~/records/2016/11/12/record.

각 레코드의 마지막 행에는 숫자가 있으며 각 연도에 대한 요약 통계를 계산하려고 합니다.

두 사용자의 입력이 필요한 스크립트를 작성하는 방법:

  • 년도
  • 통계

통계가 평균, 최대, 최소 또는 전체(평균, 최대 및 최소)일 수 있는 경우는 어디입니까?

답변1

year입력을 사용하여 모든 파일을 검색하고 각 파일에 대해 호출되는 명령이 호출되는 루트 디렉터리를 정의할 수 있습니다 .findrecordtail -1

find ~/records/"$YEAR" -type f -name record -exec tail -1 {} \;

이는 특정 연도의 모든 값을 인쇄하기에 충분합니다.

최소/최대/평균을 계산하고 출력을 awk계산에 적용합니다.

awk -v stat="$STATISTICS" 'BEGIN { count=0; sum=0; }
  { if(!count) { min=$0; max=$0; }
    count++;
    sum += $0;
    if($0 > max) max = $0;
    if($0 < min) min = $0;
  }
  END {
    if(count) {
      # TODO: use variable "stat" to select only one result to print
      print min;
      print sum/count; # average
      print max;
    } else {
      print "no data";
    }
  }'

이러한 조각을 결합하고 확장하여 완전한 스크립트를 얻을 수 있습니다.

관련 정보