awk는 열의 값을 보간합니다.

awk는 열의 값을 보간합니다.

looong txt 파일에 문제가 있습니다. 다음 예가 있습니다.

542    701.00
789    
971    703.00
123    708.00
879    
785    
974
101    716.00

$2 열의 누락된 값을 누락된 값 근처의 상위 값과 하위 값 사이의 보간으로 대체해야 하는데, 실제로 어떻게 시작해야 할지 모르기 때문에 아무것도 시도하지 않았습니다! 누구든지 나를 도와줄 수 있나요? 감사해요

산출

542    701.00
789    702.00
971    703.00
123    708.00
879    710.00
785    712.00
974    714.00
101    716.00

답변1

보간을 동일한 간격으로 배치해야 하는 경우 다음을 수행할 수 있습니다.

awk '
  NF > 1 {
    if(i++){ d=($2-s)/i; for(j=1; j<i; j++) printf "%s\t%.2f\n", a[j], s+j*d }
    s=$2; i=0; printf "%s\t%.2f\n", $1, $2
    next
  }
  { a[++i] = $1 }
' file

아니요, 이것이 "보간"하는 유일한 방법은 아닙니다.

답변2

awk '
  BEGIN {split("",A)}
  $2 == "" {
    A[length(A)] = $1
    # print $0, length(A)
  }
  $2 != "" {
    if (length(A) > 0) {
      I = ( $2 - P2 ) / (length(A) + 1)
      for(X=0; X<length(A); X++) {
        print "<" A[X] " "  (P2 + I * (X+1)) ">"
      }
      split("",A)
    }
    print  "!" $1 " " $2 "!"
    P1=$1; P2=$2
  }
  END {}
'

주어진

!542 701.00!
<789 702>
!971 703.00!
!123 708.00!
<879 710>
<785 712>
<974 714>
!101 716.00!

관련 정보