Sto tentando di convertire le date da un formato all'altro: Da ad es. "29 ottobre 2005" al 2005-10-29. Ho una lista di 625 date. Io uso Awk.gawk/awk: piping date to getline * a volte * non funziona
La conversione funziona - la maggior parte del tempo. Hovewer, a volte la conversione non si verifica affatto, e la variabile che si presume abbia la data (convertita) rimane indefinita.
Ciò accade sempre con le stesse righe identiche. L'esecuzione "data" esplicitamente (dalla shell Bash) nelle date di quelle righe strane funziona correttamente (le date vengono convertite correttamente). - Non è il contenuto testuale di quelle file che conta.
Perché questo comportamento e come posso correggere il mio script?
Il suo è:
awk 'BEGIN { FS = "unused" } {
x = "undefined";
"date \"+%Y-%m-%d\" -d " $1 | getline x ;
print $1 " = " x
}' uBXr0r15.txt \
> bug-out-3.txt
Se si desidera riprodurre il problema:
- Scarica questo file: uBXr0r15.txt.
- Esegui lo script Awk.
- Cerca "non definito" in bug-out-3.txt.
("indefinito" trovato 122 volte, sul mio computer.)
allora si potrebbe eseguire lo script di nuovo, e (sul mio computer) bug-out-3.txt rimane invariato - esattamente la le stesse date non sono state definite.
(Gawk versione 3.1.6, Ubuntu 9.10.)
Cordiali saluti, Magnus
Questo risolve il mio problema, grazie. Non ho bisogno dell'originale e se riordino il mio indata il problema è sparito - e salvo qualche CPU suppongo. (Il mondo reale contiene anche righe non datate, quindi non posso usare 'sort 'e' uniq ', e lo script di Awk è in qualche modo diverso.) – KajMagnus
Grazie, questo risolve anche il mio problema - stavo ricevendo un errore "Troppi file aperti" e mi chiedevo come chiudere questi "file" perché non sapevo che awk usasse i file per quelle operazioni di pipe. – flo
Ho notato questo problema nella chiamata successiva di una funzione a reseeding casuali. –