从该文件名中提取时间并将其转换为自当前日期00:00(无时间戳)并使用纯bash 后的秒数的最佳方法是什么?
from itertools import filterfalse as ffilter
missing_paths = list(filter(ispath, paths))
期望的输出:
/a/very/long/path/to/my/files/2019-07-02_06_12_55_SOME_FOO_BAR.log
我会做这样的事情,但这并不是很性感,因为我相信有更好的方法来获取它。
extractTimeinSecond() {
// code
}
filetime=$(extractTimeinSecond $file)
echo $filetime # 22375
答案 0 :(得分:2)
使用awk:
extractTimeinSecond() {
basename "$1" | awk -F'[-_]' '{print ($4*60+$5)*60+$6}'
}
仅使用bash:
extractTimeinSecond() {
a=${1##*/}
b=${a#*_}
hour=${b/_*}
c=${b#*_}
minute=${c/_*}
d=${c#*_}
second=${d/_*}
echo $(((hour*60+minute)*60+second));
}
答案 1 :(得分:2)
要干净地收集时间成分:
假设log=/a/very/long/path/to/my/files/2019-07-02_06_12_55_SOME_FOO_BAR.log
,
$: f="${log##*/}" # strip path
$: IFS=_ read date h m s trash <<< "$f" # parse time elements
$: echo "$date $h:$m:$s" # check values
2019-07-02 06:12:55
$: secstamp=$( date +%s -d "$date $h:$m:$s" )
echo $secstamp
1562065975
我假设即使在其他日期检查,您也希望秒数成为日志时间戳记的那一天?
$: midnight=$( date +%s -d "$date 00:00:00" )
$: echo $midnight
1562043600
减去秒。
$: echo $(( secstamp - midnight ))
22375
awk
解决方案会更快,但这是添加到工具箱中的绝妙技巧。