String Shell-使用模式检索文件名的一部分
从这个文件名中提取时间并从当前日期的00:00开始以秒为单位转换它的最佳方法是什么?没有时间戳并且使用纯bash 预期产出:String Shell-使用模式检索文件名的一部分,string,bash,shell,time,extraction,String,Bash,Shell,Time,Extraction,从这个文件名中提取时间并从当前日期的00:00开始以秒为单位转换它的最佳方法是什么?没有时间戳并且使用纯bash 预期产出: extractTimeinSecond() { // code } filetime=$(extractTimeinSecond $file) echo $filetime # 22375 我本来会做这样的事情,但这不是很性感,因为我相信有更好的方法 提取时间不连续{ file=$1/a/very/long/path/to/my/files/2019-07-02_06
extractTimeinSecond() {
// code
}
filetime=$(extractTimeinSecond $file)
echo $filetime # 22375
我本来会做这样的事情,但这不是很性感,因为我相信有更好的方法
提取时间不连续{
file=$1/a/very/long/path/to/my/files/2019-07-02_06_12_55_SOME_FOO_BAR.log
shortfile=$basename$file 2019-07-02_06_12_55_SOME_FOO_BAR.log
时间=$echo$shortfile | cut-d'-f 2,3,4 06_12_55
h=$$echo$time | cut-d'-f1*60*60 06*60*60=21600
m=$$echo$time | cut-d''-f2*60 12*60=720
s=$echo$time | cut-d'-f3 55
回声$$h+$m+$s 21600+720+55=22375
}
使用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));
}
使用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));
}
要干净地收集时间组件,请执行以下操作: 假设log=/a/very/long/path/to/my/files/2019-07-02_06_12_55_SOME_FOO_BAR.log 减去秒数
$: echo $(( secstamp - midnight ))
22375
awk解决方案会快得多,但这是添加到工具箱中的一个很好的技巧。要干净地收集时间组件: 假设log=/a/very/long/path/to/my/files/2019-07-02_06_12_55_SOME_FOO_BAR.log 减去秒数
$: echo $(( secstamp - midnight ))
22375
awk解决方案会快得多,但这是添加到工具箱中的一个很好的技巧。cut和basename不是纯bash。cut和basename不是纯bash。