2017-01-13 5 views
-2

У меня есть данные, разделенные точкой с запятой. В первом столбце показаны шаги фиксированного времени. Во втором и третьем столбце вы можете увидеть данные, которые частично неполными:Использование (g) awk для частичной интерполяции данных на основе столбцов с датой и временем

input.txt

14.09.2016:00:00:00;;100 
14.09.2016:00:00:01;-1; 
14.09.2016:00:00:02;0;300 
14.09.2016:00:00:03;; 
14.09.2016:00:00:04;; 
14.09.2016:00:00:05;; 
14.09.2016:00:00:06;4; 
14.09.2016:00:00:07;; 
14.09.2016:00:00:08;; 
14.09.2016:00:00:09;16;307 

Как я могу сделать локальную линейной интерполяции для каждого столбца между этими точками данных с пустыми значениями, используя AWK или поглазеть ?:

output.txt
14.09.2016:00:00:00;-2;100 
14.09.2016:00:00:01;-1;200 
14.09.2016:00:00:02;0;300 
14.09.2016:00:00:03;1;301 
14.09.2016:00:00:04;2;302 
14.09.2016:00:00:05;3;303 
14.09.2016:00:00:06;4;304 
14.09.2016:00:00:07;8;305 
14.09.2016:00:00:08;12;306 
14.09.2016:00:00:09;16;307 

Там уже есть простак скрипт, который только делает глобальной интерполяции для каждого столбца над первым последняя точка данных доступна здесь: Using awk to interpolate data column based in a data file with date and time

+3

У вас там хороший ответ. Не могли бы вы его использовать? Как насчет предоставления обратной связи? Поделитесь своими усилиями или обновите исходный вопрос. – fedorqui

+2

Возможный дубликат [Использование awk для интерполяции столбца данных на основе файла данных с датой и временем] (http://stackoverflow.com/questions/39792172/using-awk-to-interpolate-data-column-based-in- a-data-file-with-date-and-time) –

+0

Почему после 4 его 8, 12, а затем 16 во втором столбце? вот один пример: http://www.unix.com/unix-for-dummies-questions-and-answers/247167-interpolation-if-there-no-exact-match-value-2.html –

ответ

0

Учитывая линейное время, значения в ваших данных не отображаются линейными. Если вы все еще хотите использовать линейную интерполяцию, вы должны нарезать свои данные на кусочки, используйте, например, this для каждой части и снова объедините фрагменты. Поиск правильных частей кажется другой проблемой, возможно, просто найдите значения в столбце данных, как только вы найдете второе значение, вырежьте после него и продолжите с этой конкретной строки снова, как это (учитывая только первый столбец данных ($2):

14.09.2016:00:00:00;;100 
14.09.2016:00:00:01;-1; 
14.09.2016:00:00:02;0;300 

14.09.2016:00:00:02;0;300 
14.09.2016:00:00:03;; 
14.09.2016:00:00:04;; 
14.09.2016:00:00:05;; 
14.09.2016:00:00:06;4; 

14.09.2016:00:00:06;4; 
14.09.2016:00:00:07;; 
14.09.2016:00:00:08;; 
14.09.2016:00:00:09;16;307 

При рассмотрении второго столбца данных (последнее поле, $3) вы можете (должны) объединить второй и третий кусок.

Кроме того, читайте this.

0

это материал, который очень и очень сложный. Есть ли альтернативный вариант только для заполнения пустые поля с предыдущим значением непустого столбца?

input.txt

14.09.2016:00:00:00;;100 
14.09.2016:00:00:01;-1; 
14.09.2016:00:00:02;0;300 
14.09.2016:00:00:03;; 
14.09.2016:00:00:04;; 
14.09.2016:00:00:05;; 
14.09.2016:00:00:06;4; 
14.09.2016:00:00:07;; 
14.09.2016:00:00:08;; 
14.09.2016:00:00:09;16;307 

Output.txt

14.09.2016:00:00:00;;100 
14.09.2016:00:00:01;-1;100 
14.09.2016:00:00:02;0;300 
14.09.2016:00:00:03;0;300 
14.09.2016:00:00:04;0;300 
14.09.2016:00:00:05;0;300 
14.09.2016:00:00:06;4;300 
14.09.2016:00:00:07;4;300 
14.09.2016:00:00:08;4;300 
14.09.2016:00:00:09;16;307 

Я только что нашел решение, которое работает на фиксированной ширины столбца awk to Fill Empty Column value with Previous Non-Empty Column value:, но не в этом случае с точкой с запятой файлы с датой и время.

 Смежные вопросы

  • Нет связанных вопросов^_^