
長い 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!