Awk 如何使用mktime以毫秒信息更改时间。保留?

Awk 如何使用mktime以毫秒信息更改时间。保留?,awk,Awk,比如说 我想把13.29s添加到2013-4-24 3:10:50.50 如何处理毫秒 我曾尝试使用mktime和strftime,但似乎只能处理秒数…这不是一件简单的事情,但现在我们开始: time="2013-4-24 3:10:50.50" echo "13.29" | awk '{split(v,a,"[ -:.]");t=mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6])+(a[7]/100)+$1;print strftime("%Y-%m

比如说

我想把
13.29s
添加到
2013-4-24 3:10:50.50

如何处理毫秒


我曾尝试使用
mktime
strftime
,但似乎只能处理秒数…

这不是一件简单的事情,但现在我们开始:

time="2013-4-24 3:10:50.50"
echo "13.29" | awk '{split(v,a,"[ -:.]");t=mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6])+(a[7]/100)+$1;print strftime("%Y-%m-%d %H:%M:%S",t)"."(t-int(t))*100}' v="$time"
2013-04-24 03:11:03.79

解释

echo "13.29" | awk '
    {
    split(v,a,"[ -:.]")                                                 # Split the date string into separate parts
    t=mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6])+(a[7]/100)+$1     # Convert to epoch time and add milliseconds and calcualte the new value
    print strftime("%Y-%m-%d %H:%M:%S",t)"."(t-int(t))*100              # Convert back to normal time format and print it out
    }
    ' v="$time"                                                         # Read the variable

awk确实是一个强大的工具,但我不认为awk是这里的最佳选择,我会选择
gnu date

请参见带有示例数据的测试:

#add 13.29s to date 2013-4-24 3:10:50.50

kent$  date -d'+13.29 second 2013-4-24 3:10:50.50' +"%F %T.%N"
2013-04-24 03:11:03.790000000
我知道纳秒有尾随的零。但我认为如果你想移除它们,对你来说不会有问题


如果必须使用awk,您可以从awk调用外部命令。

谢谢!所以,没有简单的方法,必须为毫秒进位添加IF。。。