
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 {}
'
dá
!542 701.00!
<789 702>
!971 703.00!
!123 708.00!
<879 710>
<785 712>
<974 714>
!101 716.00!