Bash и awk: преобразование поля с 12-часового на 24-часовое время - PullRequest
2 голосов
/ 10 ноября 2011

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

file1

time ----------- valueA - valueB  
12:00:00 AM |      54.13 | 239.12  
12:00:01 AM |      51.83 | 119.93  
..  

file18

time ---------- valueA - valueB - valueC - valueD  
12:00:00 AM |      54.92 | 239.12  | 231.23  | 882.12  
12:00:01 AM |      23.92 | 121.92  | 201.23  | 892.12   
..  

После разделения файла я затем выполняю некоторую обработку каждого из файлов с помощью AWK, так что вкратце есть 2 этапа: «этап разделения» и «этап обработки».

К сожалению, временная метка, содержащаяся в большом текстовом файле, имеет один из двух форматов. Либо желательный 24-часовой формат «00:00:01», либо нежелательный 12-часовой формат «12:00:01 AM».

В результате я пытаюсь преобразовать все форматы в 24 часа, и я не уверен, как это сделать. Я также не уверен, стоит ли пытаться делать это на стадии разделения с использованием bash или на стадии процесса с использованием AWK. Я знаю, что следующая функция преобразует 12 часов в 24 часа

'date --date="12:00:01 AM" +%T'

однако, я не уверен, как включить это в мой сценарий оболочки, если я использую 'while read line' на 'split split' или мне нужно выполнить преобразование времени в AWK (если возможно?) В «этап обработки».

1 Ответ

3 голосов
/ 10 ноября 2011

см. Тест ниже, это полезно для вас?

 kent$  echo "12:00:00 AM |      54.92 | 239.12  | 231.23  | 882.12  "\
|awk -F'|' 'BEGIN{OFS="|"}{("date --date=\""$1"\" +%T") |getline $1;print }'

выход

 00:00:00|      54.92 | 239.12  | 231.23  | 882.12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...