Estou trabalhando com um arquivo csv que contém dados na seguinte estrutura:
"12345","BLAH","DEDA","0.000","1.111","2.22222","3.3333333,"15/12/2017 4:26:00 PM"
Eu quero converter o tempo de 12 horas em 24 horas. O seguinte mostra o que estou tentando alcançar no final:
"12345","BLAH","DEDA","0.000","1.111","2.22222","3.3333333,"15/12/2017 16:26:00"
Encontrei a seguinte resposta para uma pergunta que parece resolver a conversão do segmento de tempo do meu problema. https://stackoverflow.com/questions/8083973/bash-and-awk-converting-a-field-from-12-hour-to-24-hour-clock-time#8084087
Assim, com o exposto, acredito que devo fazer o seguinte processo (provavelmente existe um método mais eficiente):
Separe temporariamente a data e a hora em seus próprios registros
"12345","BLAH","DEDA","0,000","1,111","2,22222","3,3333333",15/12/2017","16:26:00"
- Alveje o registro de tempo e converta-o no formato de 24 horas desejado
- Concatenar os registros de data e hora em um único registro
Estou tentando fazer isso usando o awk e estou preso na primeira seção! O awk é a ferramenta certa para este trabalho ou você recomendaria uma ferramenta diferente?
Estou começando com a etapa 1. Não consigo nem marcar a data com sucesso!
awk 'BEGIN {FS=","} { gsub(/[0-9]\{2\}\/[0-9]\{2\}\/[0-9]\{4\}/, "TESTING"); print }' myfile.csv
Eu usaria
perl
aqui:Isso é adicionar 12 à parte da hora se for PM (exceto 12PM) e alterar 12AM para 0.
Com
awk
, não fazendo a parte do limite da palavra (portanto, poderia dar falsos positivos,123:21:99 AMERICA
por exemplo) e assumindo que há apenas uma ocorrência por linha:Esta solução converte todos os itens do formato de 12 horas para o formato de 24 horas em cada linha.
Entrada
Resultado