Интерполяция столбцовых данных - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь найти способ интерполировать две строки данных в файле CSV, вероятно, используя awk.Прямо сейчас каждая строка представляет точку данных в час 0 и час 6. Я ищу заполнить пропущенные почасовые данные между часом 0 и часом 6.

Текущий CSV

lat,lon,fhr
33.90000,-76.50000,0
34.20000,-77.00000,6

Ожидаемый интерполированный выход

lat,lon,fhr
33.90000,-76.50000,0
33.95000,-76.58333,1
34.00000,-76.66667,2
34.05000,-76.75000,3
34.10000,-76.83333,4
34.15000,-76.91667,5
34.20000,-77.00000,6

1 Ответ

0 голосов
/ 25 сентября 2018

Вот файл awk, который должен достичь этого

# initialize lastTime, also used as a flag to show that the 1st data line has been read
BEGIN { lastTime=-100 }
# match data lines
/^[0-9]/{
   if (lastTime == -100) {
      # this is the first data line, print it
      print;
   } else {
      if ($3 == lastTime+1) {
         # increment of 1 hour, no need to interpolate
         print;
      } else {
        # increment othet than 1 hour, interpolate
        for (i = 1 ; i < $3 - lastTime; i = i + 1) {
            print lastLat+($1-lastLat)*(i/($3 - lastTime))","lastLon+($2-lastLon)*(i/($3 - lastTime))","lastTime+i
         }
         print;
      }
   }
   # save the current values for the next line
   lastTime = $3;
   lastLon = $2;
   lastLat = $1;

}
/lat/{
   # this is the header line, just print it
   print;
}

Запустите его как

 awk -F, -f test.awk test.csv

Я предполагаю, что ваш третий столбец имеет целочисленные значения.

...