Как сложить время начала в формате даты и времени выполнения в миллисекундах, чтобы найти время окончания в сценарии Unix? - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть файл со столбцом со временем начала в формате, показанном ниже.

2019-10-30T08:04:30Z
2019-10-30T08:04:25Z
2019-10-30T08:04:30Z

Также у меня есть файл, имеющий время выполнения заданий, выполненных в формате миллисекунд.

2647ms 
360ms
10440ms

. ,.

Как добавить соответствующие строки в оба столбца в этих файлах и получить время окончания в результате в отдельном файле?

1 Ответ

0 голосов
/ 06 ноября 2019
paste start_time.txt execution_time.txt | while IFS="$(printf '\t')" read -r f1 f2
do

  # convert execution_time in seconds from ms
  execution_time_ms="$(echo $f2 | cut -d'm' -f1)"
  execution_time_ms="$(echo $execution_time_ms | cut -d's' -f1)"
  execution_time_s=$(awk "BEGIN {printf \"%.10f\",$execution_time_ms/1000}")

  # create dateformat string to add seconds 
  date_format=$f1
  date_format+=" +$execution_time_s"
  date_format+="seconds"

  # create end date using dateformat string
  end_time=`date --date="$date_format" +'%Y-%m-%d %H:%M:%S'`
  end_time="${end_time/ /T}"
  end_time+='Z'

  # append end time
  echo $end_time >> end_time.txt

done

Это скрипт, который решает вашу проблему. Я использовал 3 файла, как вы упомянули.

  • start_time.txt (Входной файл)
  • execute_time.txt (Входной файл)
  • end_time.txt (Выводфайл)
...