[英]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的的date
和ash
(現代可能/ 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時間戳,並將其保存在start
, end
變量中。 在腳本末尾,將計算並打印差異:
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.