Preciso de ajuda na conversão de data no local em um CSV. Basicamente, consegui converter a coluna e salvá-la em um novo arquivo, mas não consegui salvá-la no CSV original.
Eu tenho um CSV com formato de data DD/MM/YYYY HH:MM
e quero converter para YYYY-MM-DD HH:MM
, é a primeira coluna do meu CSV.
Meu arquivo CSV tem algo assim:
29/01/2018 14:07,payable,37159871,,30521316
29/01/2018 14:07,payable,37159872,,30521316
29/01/2018 14:07,payable,37159870,,30521316
29/01/2018 14:07,payable,37159869,,30521316
29/01/2018 14:07,payable,37159868,,30521316
E eu quero ter algo assim:
2018-01-29 14:07,payable,37159871,,30521316
2018-01-29 14:07,payable,37159872,,30521316
2018-01-29 14:07,payable,37159870,,30521316
2018-01-29 14:07,payable,37159869,,30521316
2018-01-29 14:07,payable,37159868,,30521316
O que fui capaz de fazer:
gawk -F, '{split($1, a, "/| "); print a[3]"-"a[2]"-"a[1]" "a[4]}' /path/to/file.csv > test_file
Então agora eu quero saber como posso salvar isso de volta no meu arquivo CSV.
A edição neste caso é tão simples que não me incomodaria com o Awk.
Com o GNU Sed é tão simples quanto:
Com BSD Sed, use:
Com ferramentas POSIX apenas é um pouco mais feio, mas não terrível:
Edit: Na verdade, uma olhada mais de perto nas especificações POSIX para
ex
revela que (quase) qualquer delimitador pode ser usado, assim como em Sed. Então:Um pouco melhor.
Dado que o awk não possui opção de "edição no local" integrada (geralmente implementada como uma cópia nos bastidores), e desde a leitura desta resposta , minha solução preferida neste cenário é da forma:
Para sua situação:
Observe a
&&
sintaxe que une os comandos e executa os comandos subsequentes somente se os anteriores forem bem-sucedidos.Já que você está usando GNU awk:
e se você quiser manter um backup do original
https://www.gnu.org/software/gawk/manual/html_node/Extension-Sample-Inplace.html#Extension-Sample-Inplace
Eu consegui o mesmo usando o comando awk abaixo
entrada.csv
comando
resultado