awk로 순위를 계산하시겠습니까?

awk로 순위를 계산하시겠습니까?

중복된 숫자가 포함될 수 있는 awk 배열의 순위를 계산하고 싶습니다.

R에서는 다음과 같습니다.

R> x=c(92, 3, 1, 4, 15, 4)
R> rank(x)
[1] 6.0 2.0 1.0 3.5 5.0 3.5

Unix에서 배열의 숫자를 정렬하는 방법은 무엇입니까?

이는 반복되는 숫자를 허용하지 않는 솔루션입니다. 중복된 숫자가 있는 배열의 순위를 반환하는 awk 함수가 있는 사람이 있나요?

awk '
    FNR == NR {numbers[$1]=1; next} 
    FNR == 1 {
        n = asorti(numbers, sorted, "@ind_num_asc")
        for (i=1; i<=n; i++) rank[sorted[i]] = i
    }
    {print rank[$1]}
' file file

답변1

rank여러 개의 경우 R에서 함수의 기본 동작케이다음번에는 평균을 낼 것 같습니다케이k-1순위(이 프로세스에서 추가 순위 사용):

$ awk '
    FNR == NR {numbers[$1]++; next}
    FNR == 1 {
        n = asorti(numbers, sorted, "@ind_num_asc")
        for (i=1; i<=n; i++) {
            k = numbers[sorted[i]]; 
            rank[sorted[i]] = i + offset + (k-1)/2; 
            offset += (k-1)
        }
    }
    {print rank[$1]}
' file file
6
2
1
3.5
5
3.5

다중성 을 기록 numbers[$1]=1하도록 변경되었습니다 numbers[$1]++.

관련 정보