Линейная интерполяция там, где данные неверны
Я хотел бы линейно интерполировать один столбец на основе предыдущих и следующих известных значений только там, где данные равны "---".
Пример данных:
0
---
---
---
10
---
20
22
15
---
---
---
-15
Требуемый выход:
0
2.5
5
7.5
10
15
20
22
15
7.5
0
-7.5
-15
Я видел коды, которые могут интерполироваться на основе первого столбца, например даты, как описано здесь. И другие коды, которые делают это для размера шага, как здесь, но они не будут работать для меня. Заранее спасибо!
1 ответ
Решение
awk
в помощь!
$ awk '!/---/ {n=c; while(c&&c--) print v+(n-c)*($1-v)/(n+1); v=$1; print }
/---/ {c++}' file
0
2.5
5
7.5
10
15
20
22
15
7.5
0
-7.5
-15