interpolação awk de valores na coluna

interpolação awk de valores na coluna

estou enfrentando um problema com muitos arquivos txt. Tenho este exemplo:

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

e preciso substituir os valores perdidos na coluna $ 2 por valores interpolados entre os valores superior e inferior próximos aos valores perdidos. Não tentei nada porque realmente não tenho ideia de como começar! então alguém pode me ajudar aqui? obrigado

Saída

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

Responder1

Se os valores interpolados devem ser apenas espaçados em intervalos iguais, então isso pode ser feito:

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

E não, esta não é a única forma de “interpolar”.

Responder2

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!

informação relacionada