Я должен извлечь из данных время двух эпох, а затем найти разницу между ними в bash?

#linux #bash #shell #sh

#линукс #удар #ракушка #ш

Вопрос:

У меня есть эти данные, где у меня есть значение двух эпох, и я должен извлечь значение, а затем рассчитать разницу?

 ;;epoch1;;epoch 2  617B96A302C71177;;1638297252.658;;1638297253.078;TTrans1;DEE61;66500;xxxxx;in;0x19;0x0;0;;scb:in;0x19;0x0;0;;sc:iund;0x0;ggp-ir:djkoe:ID 0: DSP: 1:trunk_02:ch_000  

Я попробовал приведенный ниже метод, но не знаю, как рассчитать разницу.


 #!/bin/bash awk -F";;|;" -vOFS='t' '{print strftime("%c", $3), strftime("%c", $2)}' duration.txt(data is written in this file)  

Вывод вышеприведенной команды:- Ср. 1 декабря 00:04:13 2021 Ср. 1 декабря 00:04:12 2021 Ср. 1 декабря 00:03:46 2021 Ср. 1 декабря 00:03:23 2021


эпоха 1 =1638297252,658 эпоха 2 = 1638297253,078 сначала я должен извлечь значение эпох из указанной строки. А затем, чтобы рассчитать промежуток времени (или разницу), я пытаюсь преобразовать его в формат ниже

Среда, 01 декабря 2021 года 12:04:13 по восточному времени .

Но даже после преобразования обеих эпох в указанный формат я не знаю, что делать для вычисления разницы.

И я использовал команду awk для извлечения поля из строки. пожалуйста, извините за мое скудное объяснение

Комментарии:

1. Спасибо за то, что поделились своими усилиями, не могли бы вы более четко указать образцы входных данных и образцы ожидаемых результатов в своем вопросе(отредактируйте свой вопрос), спасибо.

2. Пожалуйста, добавьте желаемый результат (без описания, без изображений, без ссылок) для этого примера ввода к вашему вопросу (без комментариев здесь).

3. @NamanSharma, Как упоминалось в комментариях выше, пожалуйста, обновите свой вопрос со всей информацией, комментарии не предназначены для размещения информации, спасибо.

4. Спасибо @RavinderSingh13. Я внес изменения.

5. Обе отметки времени относятся к 30 ноября. Как вы рассчитываете 1 декабря?

Ответ №1:

 awk -F ';' 'FNR!=1 {high = $3gt;$5?$3:$5; low = $3lt;$5?$3:$5; print high-low}' duration.txt  # gives 0.42  

Или, возможно, более читабельно:

 awk -F ';' ' FNR!=1 {  if ($3 gt; $5) {  high=$3; low=$5  } else {  high=$5; low=$3  }  print high-low }' duration.txt  

Ответ №2:

С помощью awk

 $ awk -F";" '{$3=strftime("%A %d %B %Y %T %Z",$3); $5=strftime("%A %d %B %Y %T %Z",$5); hour=substr($3,17,2);min=substr($3,20,2);sec=substr($3,23,2); hour2=substr($5,17,2);min2=substr($5,20,2);sec2=substr($5,23,2)} NR gt; 1 {print "epoch 1: "$3"nepoch 2: "$5"nTime difference is "hour2 - hour" hours " min2-min" minutes " sec2 - sec" seconds"}' input_file epoch 1: Tuesday 30 November 2021 18:34:12 GMT epoch 2: Tuesday 30 November 2021 18:34:13 GMT Time difference is 0 hours 0 minutes 1 seconds  
 $ cat script.awk #!/usr/bin/env/ awk -f  BEGIN {  FS=";" } {  $3=strftime("%A %d %B %Y %T %Z",$3)  $5=strftime("%A %d %B %Y %T %Z",$5)  hour=substr($3,26,2)  min=substr($3,29,2)  sec=substr($3,32,2)  hour2=substr($5,26,2)  min2=substr($5,29,2)  sec2=substr($5,32,2) } NR gt; 1 {  print "epoch 1: "$3"nepoch 2: "$5"nTime difference is "hour2 - hour" hours " min2-min" minutes " sec2 - sec" seconds" }  
 $ awk -f script.awk input_file epoch 1: Tuesday 30 November 2021 18:34:12 GMT epoch 2: Tuesday 30 November 2021 18:34:13 GMT Time difference is 0 hours 0 minutes 1 seconds  

Комментарии:

1. Я использовал ;; в качестве разделителя. И в txt-файле есть несколько строк. Но этот скрипт показывает только один вывод.

2. @NamanSharma Скрипт не будет работать, если вы используете ;; его в качестве разделителя. Пожалуйста, проверьте правку.

3. Спасибо @HatLess