Você está usando a função system()
da maneira errada. Ou melhor, não é o que usar aqui, pois não retorna a saída do comando, apenas o status de saída (a saída vai para o terminal).
Assumindo que date
seja GNU date
, este é um script awk
que executará a reformatação da data:
BEGIN { OFS = FS = "," }
$1 {
cmd = sprintf("date -d '%s' '+%%d-%%m-%%Y' 2>/dev/null", $1);
cmd | getline $1;
print;
close(cmd);
}
Executando:
$ awk -f script.awk data.csv
Bogført,Tekst,Beløb,Saldo
03-02-2017, random text,-425,-611524.54
O script descartará as linhas de entrada vazias. Ele cria uma string de comando cmd
que faz a conversão de data real usando o GNU date
. Erros de date
serão descartados (e $1
permanecerá inalterado).
Para fazer isso com cvssql
(de csvkit
):
$ sed '1,2d' data.csv | csvsql -H --query 'SELECT strftime("%d-%m-%Y", a), b, c, d FROM stdin' | sed '1d' >new_data.csv
Os dados em new_data.csv
estarão sem a linha de cabeçalho. Para adicioná-lo de volta:
$ cat <( head -n 1 data.csv ) new_data.csv >even_newer_data.csv