前の値と次の値に基づいて欠落している値を挿入するには?

前の値と次の値に基づいて欠落している値を挿入するには?

2つの列を持つ大きなファイルがあり、0.00、0.50、1.00、1.50 ...などの値を解釈したいと思います。 (まだ存在しない場合)前の値と次の値の平均を計算します。たとえば、対応する値3.00欠落しているので、最初の列に3.00行を追加し、2番目の列に対応する値=を追加したいと思います。(2.99 + 3.56)/2=3.14そして同じことをする3.50、4.00、4.50…等。 これは私の入力です。

0.00  0.29
0.50  0.79
1.00  1.31
1.50  1.86
2.00  2.42
2.50  2.99
3.25  3.56
3.75  4.15
4.25  4.73
4.75  5.32
5.00  5.92
5.50  6.53
6.00  7.15

これが私が望む出力です

0.00    0.29
0.50    0.79
1.00    1.31
1.50    1.86
2.00    2.42
2.50    2.99
3.00    3.28
3.50    3.86
4.00    4.44
4.50    5.03
5.00    5.92
5.50    6.53
6.00    7.15

答え1

二段階に進みます。

まず、欠落しているデータが補間されます。例は次のとおりですawk

awk '
    ($1 - prev1) > 0.25 { printf "%.2f  %.2f\n", prev1 + 0.25, (prev2 + $2)/2 }
    { print; prev1 = $1; prev2 = $2 }
' data_file

仕組みは次のとおりです。

  • まず、列1の値が欠落していることが判明した場合(以前の値の> 0.25)、列2の平均を計算して欠落行を印刷します。
  • 次に、現在の行を印刷し、次のループの前の値を設定します。

最後に、不要な行をフィルタリングできます。

(previous awk command) | awk '$1 ~ /0$/'

最後のawkコマンドは、最初の値がで終わる行のみを表示します0

関連情報