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