Eu usaria perl
:
perl -MPOSIX -pe 's{\b\d{10}(?=\d{9}\b)}{
strftime("%Y-%m-%d %T.", localtime $&)}ge'
(dando a hora no horário local, use gmtime
em vez de localtime
para os horários GMT)
Eu tentei as várias soluções oferecidas na questão de qual delas parece ser uma duplicata. Alguns deles realmente não converteram o tempo, um deles converteu o tempo, mas o ano estava errado e não substituiu o valor existente no arquivo, ele adicionou uma nova coluna à saída. A resposta que aceitei abaixo atendeu perfeitamente às minhas necessidades.
Desculpe se esta é uma duplicata, eu procurei extensivamente e não encontrei perguntas que correspondessem à minha situação. Eu uso o Linux com freqüência, mas minhas habilidades de "programação" são limitadas a scripts de shell simples.
Eu tenho um arquivo csv com uma coluna de carimbos de data / hora escrita no formato epoch (isto é, Unix). Por favor, veja o exemplo abaixo. Eu gostaria de converter e substituir o tempo Unix com o formato ISO 8601.
Exemplo de saída existente:
foo, 1439856000000000000, foo, foo
foo, 1439856360000000000, foo, foo
foo, 1439856720000000000, foo, foo
foo, 1439857080000000000, foo, foo
Exemplo de saída desejada:
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
Tags timestamps