두 줄이 같은 문자로 시작하는지 확인하고, 그렇다면 평균을 인쇄하고, 그렇지 않으면 실제 값을 인쇄하세요.

두 줄이 같은 문자로 시작하는지 확인하고, 그렇다면 평균을 인쇄하고, 그렇지 않으면 실제 값을 인쇄하세요.

첫 번째 열의 두 행이 동일한 숫자로 시작하는지 확인하고 싶고, 이런 일이 발생하면 두 번째 열의 평균을 표시해야 합니다. 파일 예:

01  21    6    10%       93.3333%
01  22    50   83.3333%  93.3333%
02  20.5  23   18.1102%  96.8504%
02  21.5  100  78.7402%  96.8504%
03  22.2  0    0%        100%
03  21.2  29   100%      100%
04  22.5  1    5.55556%  100%
04  23.5  17   94.4444%  100%
05  22.7  9    7.82609%  100%
05  21.7  106  92.1739%  100%
06  23    11   17.4603%  96.8254%
06  22    50   79.3651%  96.8254%
07  20.5  14   18.6667%  96%
07  21.5  58   77.3333%  96%
08  21.8  4    100%      100%
09  22.6  0    0%        100%
09  21.6  22   100%      100%

예를 들어 처음 두 줄은 로 시작 01하지만 단 한 줄만 08(15번 줄)로 시작합니다. 따라서 이 두 가지 경우를 기반으로 한 출력은 다음과 같아야 합니다.

01 21.5
...
...
...
08 21.8
...
...
...

나는 다음 awk 라인으로 끝났습니다. 파일에 항상 두 개의 유사한 라인이 있을 때 완벽하게 작동하지만 위에 표시된 파일을 사용할 때(라인 15 때문에) 실패합니다.

awk '{sum+=$2} (NR%2)==0{print sum/2; sum=0;}'

어떤 조언이라도 환영합니다.

답변1

어쩌면 다음과 같은 것일 수도 있습니다.

#!/usr/bin/awk -f
function reset(){
    n = $1; sum = $2; cnt = 1
}
{
    reset()
    while(getline){
        if(n == $1){
            sum += $2; cnt++;
        }else{
            print n, sum/cnt
            reset()
        }
    }
}
END{ print n, sum/cnt }

관련 정보