簡體   English   中英

如何使用Shell腳本計算文件中兩個時間條目之間的時間跨度?

[英]How can you can calculate the time span between two time entries in a file using a shell script?

在Linux腳本中:我有一個文件,該文件中的每個消息都有兩個時間條目。 “接收時間”和“源時間”。 文件中有數百條消息。

我想計算兩次之間的經過時間。

2014-07-16T18:40:48Z  (received time)
2014-07-16T18:38:27Z  (source time)

源時間是接收時間之后的3行,並不重要。

有關輸入數據的信息:

輸入有一行如下:

TimeStamp:        2014-07-16T18:40:48Z  

2行后:一行中的一堆消息,每一行中,多次是:

sourceTimeStamp="2014-07-16T18:38:27Z"

您應該可以使用這樣的date (例如)

date +%s --date="2014-07-16T18:40:48Z"

將兩個時間戳都轉換為Unix時間戳。 然后將它們之間的時間差減少為簡單的減法。

這有幫助嗎?

如果您有GNU的date (而不是busybox的date ),則可以通過以下方法在幾秒鍾內給出差異:

#!/bin/bash
A=$(date -d '2014-07-16T18:40:48Z' '+%s')
B=$(date -d '2014-07-16T18:38:27Z' '+%s')
echo "$(( A - B )) seconds"

對於busybox的的dateash (現代可能/ BusyBox的v1.21.0):

#!/bin/ash
A=$(busybox date -d '2014-07-16 18:40:48' '+%s')
B=$(busybox date -d '2014-07-16 18:38:27' '+%s')
echo "$(( A - B )) seconds"

我會用awk 以下腳本搜索感興趣的行,將時間值轉換為UNIX時間戳,並將其保存在startend變量中。 在腳本末尾,將計算並打印差異:

timediff.awk

/received time/ {
    "date -d "$1" +%s" | getline end 
}

/source time/ {
    "date -d "$1" +%s" | getline start
     exit
}

END {
    printf "%s seconds in between", end - start
}

像這樣執行:

awk -f timediff.awk log.file

輸出:

141 seconds in between

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM