awk interpolación de valores en la columna

awk interpolación de valores en la columna

Tengo un problema con muchos archivos de texto. Tengo este ejemplo:

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

y necesito reemplazar los valores perdidos en la columna $2 con valores interpolados entre los valores superior e inferior cerca de los valores perdidos. No intenté nada porque realmente no tengo idea de cómo empezar. ¿Alguien puede ayudarme aquí? gracias

Producción

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

Respuesta1

Si los valores interpolados deben estar espaciados a intervalos iguales, entonces esto puede ser suficiente:

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

Y no, ésta no es la única forma de "interpolar".

Respuesta2

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 {}
'

da

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

información relacionada