여러 숫자의 평균-쉘 스크립트


0

로그 파일을보고 특정 양의 밀리 초 / 초 동안 greps하는 스크립트를 만들었습니다. 최소값과 최대 값을 볼 수있는 것을 만들었지 만 목록의 평균을 찾아야합니다.

logdir_8080='/opt/product/apachetomcat/8.5.5_8080/logs'
cd "$logdir_8080"

get_file=`ls -rt localhost_access_log.*.txt|tail -1`

cat $get_file | tail -1000 | grep "objectId" | awk -F 'HTTP/1.1" 200' '{ 
print $2}'|awk -F' ' '{ print $2 }' | sort - n>/opt/product/apachetomcat/apm/epagent/epaplugins/centrica/correspondence_log_files/8080.txt

최소값 :

cat /opt/product/apachetomcat/apm/epagent/epaplugins/centrica/correspondence_log_files/8080.txt|head -1

최대 값 :

cat /opt/product/apachetomcat/apm/epagent/epaplugins/centrica/correspondence_log_files/8080.txt|tail -1

목록의 아이디어 :

233
249
283
283
302
303
332
333
643
851
965
965
972
1022
1135
1182
1213
1232
1264
1273
1390
1403
1414
1429
1474
1537
1540
1543
1545
1556
1565
1566
1577
1589
1591
1599
1602
1621
1622
1647
1653
1705
1740
1772
1774
1933
1935
1983
1990

평균을 얻는 방법?

답변:


1

파일에서 유일한 것이 숫자 인 경우 단일 awk 명령을 사용하여 모든 것을 얻을 수 있습니다.

awk 'BEGIN {themin=10000000; themax=0; thecount=0; thesum=0}
    {for (i=1; i<=NF; i++) {
        thesum += $i;
        thecount++;
        if ($i < themin) {themin = $i}
        if ($i > themax) {themax = $i}
    }}
    END {
      printf("The min is %d\nThe max is %d\nThe sum is %d\nThe total number of items is %d\nThe average of those items is %d\n", themin, themax, thesum, thecount, int(thesum/thecount))
}' _file_

나는 당신이 다른 섹션을 볼 수 있도록 그것을 돌파했습니다.

BEGIN은 사용할 모든 변수를 초기화하는 중입니다. 변수 themin은 파일의 값보다 큰 한 원하는 값으로 설정할 수 있습니다.

중간 부분은 각 줄과 해당 줄의 각 필드를 반복합니다. 그것은 숫자를 합산하고 모든 숫자의 수를 얻으므로 끝에서 간단한 나눗셈을 수행 할 수 있습니다. 두 개의 if 문은 최소값과 최대 값을 수집합니다.

END는 최소, 최대 및 평균을 포함하여 모든 관련 정보를 인쇄합니다.

이것이 도움이되기를 바랍니다.


0

이미 훌륭한 솔루션이있는 문제에 대해 자체 솔루션을 작성할 필요가 없습니다. 결국, 당신은 StackOverflow가 아닌 ​​SuperUser에게 물었습니다.

예를 들어 GNU를 사용하십시오 datamash

$ datamash min 1 max 1 mean 1 < yourFile
233     1990    1272.0408163265

패키지에서 도구를 사용하거나 num-utils

$ numbound -l yourFile
233
$ numbound yourFile
1990
$ numaverage yourFile
1272.04081632653
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.