Posso converter e substituir tempos unix armazenados em um arquivo com o formato iso 8601? [duplicado]

1

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
    
por Emily Shaffer 17.08.2016 / 18:10

1 resposta

1

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)

    
por 17.08.2016 / 18:34

Tags