Atualmente 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. No entanto, como os arquivos são exibidos todos os dias, o nome do arquivo será alterado e eu quero cron o script.
Minha pergunta é como faço para que meu script identifique a data anexada no final do arquivo no arquivo e acrescente ao arquivo de saída?
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
Script:
awk 'BEGIN{FS=OFS=","}
NR==1 {print}
NR>1 {
("date -d \""$1" -1 day\" +%m/%d/%Y")|getline newline
$1=newline
print
}' wrongdates{date1}.csv > correctdates{date1}.csv
O formato 'Data1' geralmente é 20140228
ou %Y%m%d
* * além do acima eu descobri que isso só funciona em minha caixa unix e não em solaris.
Eu consegui movê-lo para nawk na caixa solaris, mas agora ele está reclamando que 'date -d' não é suportado e quando eu tento mudar 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}' StateStreetPositions20140228.csv
Parece que não recebo nenhuma palavra com a sintaxe das minhas declarações if e else.