#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