Линейная интерполяция там, где данные неверны

Я хотел бы линейно интерполировать один столбец на основе предыдущих и следующих известных значений только там, где данные равны "---".

Пример данных:

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
Другие вопросы по тегам