awk 특정 열 평균화 도움말

awk 특정 열 평균화 도움말

논문을 위해 일부 데이터를 처리해야 하는데 포인트가 200만 개가 넘기 때문에 Linux를 통해 처리해야 합니다. 나는 현재 다음과 같은 파일에 선택한 데이터를 저장하기 위해 awk를 사용했습니다.

2003.1 -142 42.0000 -6.8990
2003.2 -142 42.0000 -4.7063
...
2003.12 -142 42.0000 -2.1986
2004.1 -139 42.0000 0.6408
2004.2 -139 42.0000 3.7293
2004.3 -137 50.0000 6.9090
2004.4 -136 50.0000 10.0193

열은 10진수 연도, 경도, 위도, 값입니다. 같은 위도와 경도로 같은 연도의 각 포인트 값의 평균을 계산하고 싶습니다(따라서 현재 연도의 소수점 자리는 무시합니다).

예를 들어 출력은 다음과 같습니다.

2003   1   1   30.000
2003   1   2   20.000
...
2003   180 90  40.000
2004   1   1   30.000
2004   1   2   20.000
...
2004   180 90  40.000
...
...
...
2015   180 90 -100.000

연간 각 포인트의 평균입니다.

저는 현재 awk를 사용하고 있는데 혹시 사용법을 알려주시면 정말 감사하겠습니다. 감사합니다!

답변1

그것은 마치

#!/usr/bin/gawk
BEGIN {OFS = "\t"}
{
    key = int($1) OFS $2 OFS $3
    sum[key] += $4
    count[key]++
}
END {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    for (key in sum)
        print key, sum[key]/count[key]
}

관련 정보