Bash

如何檢查兩個“日期時間”時間戳之間的“日期時間”時間戳

  • December 20, 2019

我已經搜尋並找到了幾種檢查時間戳是否在兩個時間戳之間的方法,但所有方法 HH:MM:SS都只採用格式,而不考慮date

我的真實生活場景是從日誌文件以包括日期和毫秒的通用格式輸入的時間戳:2019-11-11 19:05:55,823.

假設我有一個給定的時間戳2019-11-11 19:05:55,823,我如何確定它是在範圍內還是范圍外:

2019-11-11 17:02:54,479
2019-11-12 05:13:55,998

?

特別是對於 bash,它應該只是一個問題:

start='2019-11-11 17:02:54,479'
end='2019-11-12 05:13:55,998'
date='2019-11-11 19:05:55,823'

if LC_ALL=C command eval '[[ ! $date < $start && ! $date > $end ]]'; then 
 echo the date is in the range
fi

這進行了詞彙比較。這是有效的,因為在 C 語言環境中,這些日期表示按詞彙和時間順序排序。

bash[[ < / > ]]運算符用於strcoll()比較字元串,因此使用本地化排序算法。在 C 語言環境strcoll()中旨在像strcmp(). 在其他語言環境中,它會根據語言環境的約定進行比較,因此您對結果沒有太多保證。

POSIXly,您可以使用:

if LC_ALL=C expr "x $date" '>=' "x $start" '&' "x $date" '<=' "x $end" > /dev/null; then
 echo the date is in the range
fi

現在,如果您正在處理日誌文件,您可能希望與awk. 假設時間戳位於每行的開頭:

LC_ALL=C awk -v start='2019-11-11 17:02:54,479' \
            -v end='2019-11-12 05:13:55,998' '
  $0 >= start && $0 <= end' < file.log

將列印以該範圍內的時間戳開頭的行。

引用自:https://unix.stackexchange.com/questions/558204