Eu tenho arquivos diários que chegam via FTP com datas incorretas na primeira coluna do arquivo. Eu descobri como deduzir um dia para obter a data correta e imprimi-lo em um novo arquivo. O principal problema é que meu script funciona em unix usando gnu, mas não em solaris.
dados contidos no arquivo:
End Date,Name,Amount
02/07/2014,data1, data2
02/02/2014,data1, data2
02/06/2014,data1, data2
02/06/2014,data1, data2
02/06/2014,data1, data2
02/10/2014,data1, data2
02/12/2014,data1, data2
02/20/2014,data1, data2
02/20/2014,data1, data2
02/21/2014,data1, data2
02/28/2014,data1, data2
03/03/2014,data1, data2
Script:
awk 'BEGIN{FS=OFS=","}
NR==1 {print}
NR>1 {
("date -d \""$1" -1 day\" +%m/%d/%Y")|getline newline
$1=newline
print
}' wrongdates.csv > correctdates.csv
Eu consegui mover parte do script para nawk na caixa solaris, mas agora ele está reclamando que 'date -d' não é suportado e quando eu tento alterar isso, recebo 'date: bad conversion'.
Além disso, o texto acima não leva em consideração fins de semana ao alterar as datas com o arquivo, pois eu só me preocupo com dias úteis e estou tentando introduzir instruções if e else. conforme o abaixo
nawk 'BEGIN{FS=OFS=","} NR==1 {print};NR>1 {if (date "$1" "+%u"==1) ("date -d \""$1" -1 day\" +%m/%d/%Y")| getline newline; $1=newline; {print}; else ("date \""$1" -3 day\" +%m/%d/%Y")| getline newline; $1=newline; print}' file20140228.csv > file2.csv
Parece que não estou chegando onde com a sintaxe de minhas declarações if e else e a última data em minha amostra 03/03/2014 deve ser convertida para 28/02/2014 e 28/02/2014 deve se tornar 02 / 27/2014.