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
。