BASH AWK Script adiciona dias à data fixa

1

Minha tarefa é exportar dados de um banco de dados com a instrução UNLOAD TO no dbaccess e convertê-los em um arquivo, que pode ser inserido em um banco de dados semelhante.

Agora, o problema:

O banco de dados antigo (vamos chamá-lo DB1) tem algumas datas nele armazenadas em minutos a partir de 01.01.1993. Então, por exemplo, 11.980.800 minutos seriam hoje. Agora preciso pegar esse valor e convertê-lo em uma data no formato %d.%m.%Y , para que ele caiba na linha do novo banco de dados (DB2), que aceita apenas DATE como valor.

Os dados exportados do DB1 são separados por ^ . Eu tenho algumas declarações if relevantes para outras linhas, mas eu simplesmente não consigo lidar com as linhas com o valor DATE como eu já escrevi. A declaração de impressão é assim:

print "INSERT INTO zdv_voa(voa_fnr, voa_kritkz, voa_krit, voa_kz, voa_datv, voa_datb, voa_grund) VALUES("$1",\'"$2"\',\'"$3"\',\'"$4"\',"$5","$6",\'"$7"\');"

em que $5 e $6 são os minutos que precisam ser convertidos em datas.

Depois de executar o script awk, preciso de um arquivo com:

INSERT INTO zdv_voa(voa_fnr, voa_kritkz, voa_krit, voa_kz, **voa_datv**, **voa_datb**, voa_grund) VALUES(1,'P','148','T','10.10.2015','02.07.1999','60');

As datas usadas aqui são apenas exemplos e os outros valores já foram convertidos por mim.

    
por Mati 13.10.2015 / 15:13

1 resposta

3

quantos segundos decorrem da época até janeiro de 1993?

date -d '01/01/1993' +%s

strftime

você pode testar se você permitir que strftime()

echo 11980000 | awk '{u=60*$1+725842800 ; printf "%d -> %s\n",u, strftime("%x",u); } '

esse retorno 10/12/2015

agora no seu código add

dollar5=strftime("%x",60*$5+725842800) ;
# $6 is left as an exercice ..
print "INSERT INTO zdv_voa(voa_fnr, voa_kritkz, voa_krit, voa_kz, voa_datv, voa_datb, voa_grund) VALUES("$1",\'"$2"\',\'"$3"\',\'"$4"\',\'"dollar5"\',\'"dollar6"\',\'"$7"\');"
    
por 13.10.2015 / 15:45