Estoy intentando convertir fechas de un formato a otro: De p. Ej. "29 de octubre de 2005" a 2005-10-29. Tengo una lista de 625 fechas. Yo uso Awk.gawk/awk: fecha de la tubería para getline * algunas veces * no funcionará
La conversión funciona, la mayoría de las veces. Hovewer, a veces la conversión no ocurrirá en absoluto, y la variable que se supone que contiene la fecha (convertida) permanece indefinida.
Esto siempre ocurre exactamente con las mismas filas. Ejecutar `fecha 'explícitamente (desde el shell Bash) en las fechas de esas filas extrañas funciona bien (las fechas se convierten correctamente). - No son los contenidos textuales de esas filas lo que importa.
¿Por qué este comportamiento y cómo puedo corregir mi script? Su
es:
awk 'BEGIN { FS = "unused" } {
x = "undefined";
"date \"+%Y-%m-%d\" -d " $1 | getline x ;
print $1 " = " x
}' uBXr0r15.txt \
> bug-out-3.txt
Si desea reproducir este problema:
- Descargar este archivo: uBXr0r15.txt.
- Ejecute el Awr skript.
- Buscar "indefinido" en bug-out-3.txt.
("indefinido" que se encuentra 122 veces, en mi equipo.)
entonces se podría ejecutar el script de nuevo, y (en mi equipo) insecto-hacia fuera-3.txt permanece sin cambios - exactamente el las mismas fechas quedan sin definir.
(versión 3.1.6 Gawk, Ubuntu 9.10.)
Saludos cordiales, Magnus
Esto resuelve mi problema, gracias. No necesito el pedido original y si reordenar mis indata, el problema también desapareció, y supongo que ahorraré algo de CPU. (Los datos indata del mundo real también contienen filas sin fecha, por lo que no puedo usar 'sort 'y' uniq', y el script Awk real es algo diferente.) – KajMagnus
Gracias, esto también resuelve mi problema: recibía un error "Demasiados archivos abiertos" y se preguntó cómo cerrar estos "archivos" porque no sabía que awk usa archivos para esas operaciones de tubería. – flo
Me di cuenta de este problema en la posterior llamada de una función para resembrar al azar. –