Convierta la fecha al formato de época dentro de un archivo para múltiples entradas usando un script de shell

Convierta la fecha al formato de época dentro de un archivo para múltiples entradas usando un script de shell

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 date2018-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

información relacionada