Perché questo gawk con strftime non funziona in SUSE ma funziona su Ubuntu e MAC


0

Qui ho inserito $ 11 come stringa e funziona.

    gawk 'FS=\",\" {match($6,/([^\/])\/([^\/])\/([^\/]+)/,a); $11=sprintf(\"%d 
    %02d -%d 0 0 0\",a[3],a[1],1);$6=sprintf(\"%d-%02d-
    %02d\",a[3],a[1],a[2]);$6=strftime(\"%Y-%m-%d %H:%M:%S\",mktime(\"2017 08 
    -3 0 0 0\")); print $1,$2,$3,$4,$5,$6,$7,$8,$9,$11,\"".date("Y-m-d 
    H:i:s")."\"}' OFS=',' ./stock_File.csv > ./stock_File_DEMO.csv

Ma quando provo questo

    gawk 'FS=\",\" {match($6,/([^\/])\/([^\/])\/([^\/]+)/,a); 
    $11=sprintf(\"%d %02d -%d 0 0 0\",a[3],a[1],1);$6=sprintf(\"%d-%02d-
    %02d\",a[3],a[1],a[2]);$6=strftime(\"%Y-%m-%d %H:%M:%S\",mktime($11)); 
    print $1,$2,$3,$4,$5,$6,$7,$8,$9,$11,\"".date("Y-m-d 
    H:i:s")."\"}' OFS=',' ./stock_File.csv > ./stock_File_DEMO.csv

Ottengo questo errore in SUSE ma non in UBUNTO o MAC OSX El Caption:

    fatal: strftime: second argument less than 0 or too big for time_t

Per favore, non $11=sprintf(\"%d %02d -%d 0 0 0\",a[3],a[1],1)è solo una demo poiché 1 è nello script reale una variabile di shell e l'intero script è fatto in php da exec. Ho ridotto il problema al problema principale.

Il mio file di input è simile a:

     "MERCK KGAA O.N.","MRK.DE",92.59,92.33,"-0.28%","8/7/2017",N/A,92.21,93.01
     "MUENCH.RUECKVERS.VNA O.N.","MUV2.DE",186.15,186.30,"+0.08%","8/7/2017",N/A,185.80,186.65
     "PROSIEBENSAT.1  NA O.N.","PSM.DE",34.240,34.105,"-0.394%","8/7/2017",5.260,34.015,34.305
     "RWE AG ST O.N.","RWE.DE",18.495,18.505,"+0.054%","8/7/2017",N/A,18.395,18.545
     "SAP SE O.N.","SAP.DE",91.44,91.06,"-0.42%","8/7/2017",N/A,90.99,91.51
     "SIEMENS AG NA","SIE.DE",111.55,111.60,"+0.04%","8/7/2017",N/A,111.45,112.25
     "THYSSENKRUPP AG O.N.","TKA.DE",25.41,25.59,"+0.73%","8/7/2017",0.54,25.48,25.73
     "VOLKSWAGEN AG ST O.N.","VOW.DE",131.95,131.35,"-0.45%","8/7/2017",N/A,131.00,131.95
     "VONOVIA SE NA O.N.","VNA.DE",35.900,35.765,"-0.376%","8/7/2017",N/A,35.685,36.000

Qualche idea o aiuto per me? GRAZIE


La prima cosa da controllare è la versione delle varie utility. Mentre Ubuntu include software piuttosto aggiornato (almeno al momento della pubblicazione), alcune altre distro tendono ad attenersi a versioni molto più vecchie.
xenoide,

Grazie, ti dispiace dirmi come posso verificare la versione di SUSE gawk?
Walter Schrabmair,

Su un intuizione, gawk --version? Oppure chiedi al gestore pacchetti cosa ha installato.
xenoide,

Su SUSE ho l'API GNU Awk 4.1.0: 1.0 e su Ubutnu GNU Akw 4.1.4 API: 1.1, come posso aggiornare il mio SUSE gawk? Grazie
Walter Schrabmair il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.