여러 디렉터리에 여러 파일(레코드)이 있습니다. 각 레코드는 생성 날짜를 기준으로 자체 경로에 있습니다.
예를 들어 2016년 11월 12일의 기록은 다음과 같습니다.
~/records/2016/11/12/record.
각 레코드의 마지막 행에는 숫자가 있으며 각 연도에 대한 요약 통계를 계산하려고 합니다.
두 사용자의 입력이 필요한 스크립트를 작성하는 방법:
- 년도
- 통계
통계가 평균, 최대, 최소 또는 전체(평균, 최대 및 최소)일 수 있는 경우는 어디입니까?
답변1
year
입력을 사용하여 모든 파일을 검색하고 각 파일에 대해 호출되는 명령이 호출되는 루트 디렉터리를 정의할 수 있습니다 .find
record
tail -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";
}
}'
이러한 조각을 결합하고 확장하여 완전한 스크립트를 얻을 수 있습니다.