-1

ниже приведен формат в файле. Может ли кто-нибудь помочь в преобразовании первых двух столбцов в формате даты в формат эпохи?

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

Я пытался с помощью следующей команды.

aa = cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}' ; для i в cat ATMIF.180102-0615 |grep -|awk -F ',' '{print $1}' ; сделать дату -d "$ aa" "+% s"; сделанный

но выдает ошибку как: дата: недействительная дата 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 'дата: недействительная дата `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 '

1 ответ1

0

Это сделало бы это, предполагая, что данные находятся в:

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

Примечание: вам может понадобиться добавить «UTC» в команду даты в соответствии с форматом источника.

Теперь, чтобы сделать это на месте в соответствии с вашим комментарием, вам нужно зациклить все файлы. Например, используя команду find для рекурсивного сопоставления всех файлов .csv в /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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .