
A continuación se muestra el formato de un archivo. ¿Alguien puede ayudar a convertir las dos primeras columnas que están en formato de fecha al formato de época?
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,0,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,2,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,3,332,0,0,0,332,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702058496,4,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,0,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,2,0,0,0,0,919,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,3,919,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702062592,4,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,0,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,2,0,0,0,0,0,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,3,0,0,0,0,919,0,0
2018-01-02 05:44:00,2018-01-02 05:59:00,1,702066688,4,0,0,0,0,0,0,0
2018-01-02 10:44:00,2018-01-02 10:59:00,1,702058496,0,0,0,0,0,0,0,0
2018-01-02 10:44:00,2018-01-02 10:59:00,1,702058496,2,0,0,0,0,0,0,0
Lo intenté con el siguiente comando.
aa= cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'
; para i en cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}'
;hacer fecha -d "$aa" "+%s"; hecho
pero da un error como: fecha: fecha no válida 2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00' date: invalid date
2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05 :44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018 -01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 10: 44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018- 01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44 :00\n2018-01-02 10:44:00\n2018-01-02 10:44:00' fecha: fecha no válida `2018-01-02 05:44:00\n2018-01-02 05:44: 00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01- 02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00\n2018-01-02 05:44:00 \n2018-01-02 05:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\ n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00\n2018-01-02 10:44:00'
Respuesta1
Esto sería suficiente, suponiendo que los datos estén en:
IFS=,;while read line; do
ff=($line);
ff[0]=`date -d "${ff[0]}" +%s`;
ff[1]=`date -d "${ff[1]}" +%s`;
echo "${ff[*]}";
done < file.in > file.out
Nota: es posible que deba agregar 'UTC' en el comando de fecha según el formato de origen.
Ahora, para hacerlo en el lugar como lo solicita su comentario, debe realizar un bucle en todos los archivos. Por ejemplo, usar el comando buscar para hacer coincidir todos los archivos .csv de forma recursiva en /mypath/to-files/:
for file in $(find /mypath/to-files -name "*.csv"); do
cp $file /tmp/tmp.csv
IFS=,;while read line; do
ff=($line);
ff[0]=`date -d "${ff[0]}" +%s`;
ff[1]=`date -d "${ff[1]}" +%s`;
echo "${ff[*]}";
done < /tmp/tmp.csv > $file
done