修改 Bash 脚本的日期和时间戳



我想重用这个代码片段来查看日志文件的最后10分钟。然而,我的日期和时间戳不同:

2021年6月12日09:23:15.543

如何修改此代码段以识别此格式?

#!/bin/bash
declare -A month
for i in {1..12};do
LANG=C printf -v var "%(%b)T" $(((i-1)*31*86400))
month[$var]=$i
done
printf -v now "%(%s)T" -1
printf -v ref "%(%m%d%H%M%S)T" $((now-600))
while read line;do
printf -v crt "%02d%02d%02d%02d%02d" ${month[${line:0:3}]} 
$((10#${line:4:2})) $((10#${line:7:2})) $((10#${line:10:2})) 
$((10#${line:13:2}))
# echo " $crt < $ref ??"   # Uncomment this line to print each test
[ $crt -gt $ref ] && break
done
cat

06-12-2021 09:23:15.543

如何修改此代码段以识别此格式?

我不知道你会怎么做;我会将printf -v crt …命令替换为:

IFS=- :. read m d y H M S _ <<<$line
printf -v crt "%02d" $((10#$m)) $((10#$d)) $((10#$H)) $((10#$M)) $((10#$S))

通过分隔符读取日期和时间成分比通过字符位置拾取更不容易出错,也更清晰。

最新更新