1

输入文件包含

2012-12-23 23:59:59

我必须先将时间转换为秒,然后与日期结合(将日期作为小数添加到时间)

time (sec) = 23*3600 + 59*60 + 59 = 86400

日期 .23(仅限日期)

输出应该是86400.23

请朋友们帮帮我。我无法让这个工作。提前致谢。

4

2 回答 2

1

请参阅以下bash代码:

d='2012-12-23 23:59:59'
IFS=: read h m s <<< "$d"
day=${d% *}; day=${day##*-}
echo $(( (${h#* } * 3600) + (m * 60) + s)).$day

或与awk

d='2012-12-23 23:59:59'
read day hour min sec < <(awk -F'[ :-]' '{print $3, $4, $5, $6}' <<< "$d")
echo $(( (hour * 3600) + (min * 60) + sec)).$day

或者简单地说:

 echo '2012-12-23 23:59:59' | awk -F'[ :-]' '{print ($4*3600)+($5*60)+$6"."$3}'
于 2012-10-17T18:28:46.507 回答
1

您可以使用date命令来验证/格式化输入:

#!/bin/bash
read datetime
date=$(date --date="$datetime" +%d)
time=$(date --date="$datetime" +"1970-01-01 %H:%M:%S UTC")
echo $(date --date="$time" +%s).$date
# -> 86399.23

演示

于 2012-10-17T20:02:50.250 回答