我希望获得以下示例的日期连续差异。如何将每个日期转换为纪元秒?
7/21/17 6:39:12:167 GMT
7/21/17 6:39:12:168 GMT
7/21/17 6:39:12:168 GMT
7/21/17 6:39:12:205 GMT
7/21/17 6:39:12:206 GMT
7/21/17 6:39:12:206 GMT
一旦每一行转换为纪元秒,我就可以简单地运行另一个脚本来获得每一行的连续差异。感谢。
答案 0 :(得分:2)
您可以使用date
命令转换时间。给出这样一条线:
7/21/17 6:39:12:167 GMT
首先需要在秒部分之后和之后删除所有内容,以获取此信息:
7/21/17 6:39:12
您可以使用cut -d: -f1-3
。然后,转换为纪元秒,如果您使用的是FreeBSD或Mac OS:
date -ujf "%m/%d/%y %H:%M:%S" "7/21/17 6:39:12" +%s
给出了:
1500619152
如果您使用的是GNU日期(例如在Linux上),则可以向其提供整个日期文件。由于输入文件的格式不正确,我们可以这样做:
date --file <(cut -d: -f1-3 infile) +%s
只需调用一次date
即可读取整个文件,效率更高,但仅适用于GNU日期。
答案 1 :(得分:1)
这是GNU awk中的一个。它将时间戳转换为以秒为单位的纪元时间,并从后者中减去前者。用于转换的mktime
函数不会花费几分之一秒,但会将分数存储到哈希a[7]
,并且在减去之前没有任何内容阻止您将其添加到t
var:
$ awk '
function zeropad(s) { # zeropad function
return sprintf("%02d", s)
}
{
split($0,a,"[/ :]") # split timestamp to a
for(i in a)
a[i]=zeropad(a[i]) # zeropad all components
t=mktime(20 a[3] " " a[1] " " a[3] " " a[4] " " a[5] " " a[6])
# add the fractions in a[7] here
if(NR>1) # might be unnecessary
print t-p # output subtracted seconds
p=t # set current time to previous
}' file
0
0
0
0
0
由于您没有包含预期的输出或正确的数据样本,这是我现在能做的最好的。
修改强>
由于您的数据没有完全反映是否显示一秒的分数,如0:0:0:100或0:0:0:1我将zeropad
函数修改为左右垫给定值。现在,您可以将其称为zeropad(value, count, left/right)
或zeropad(a[7],3,"r")
:
function zeropad(s,c,d) {
return sprintf("%" (d=="l"? "0" c:"") "d" (d=="r"?"%0" c-length(s) "d":""), s,"")
}
{
split($0,a,"[/ :]") # split timestamp to a
for(i in a)
a[i]=zeropad(a[i],2,"l") # left-pad all components with 0s
t=mktime(20 a[3] " " a[1] " " a[3] " " a[4] " " a[5] " " a[6])
t=t+zeropad(a[7],3,"r")/1000 # right-pad fractions with 0s
if(NR>1) # might be unnecessary
print t-p # output subtracted seconds
p=t # set current time to previous
}
0.00999999
0
0.37
0.00999999
0
带有适当修饰符的 printf
可能应该用于输出以获得合理的值。
答案 2 :(得分:0)
假设您在变量中有其中一个日期:
$ d='7/21/17 6:39:12:167 GMT'
使用GNU日期,我们需要删除毫秒部分。这可以通过bash的模式替换:
来完成$ echo "${d/:??? / }"
7/21/17 6:39:12 GMT
要将其转换为秒 - 自 - 纪元,我们使用-d
选项设置日期和%s
格式以请求秒 - 自 - 纪元:
$ date -d "${d/:??? / }" +%s
1500619152
兼容性:Mac OSX不支持GNU的-d
选项,但我认为它有类似的选项。在许多操作系统上,包括OSX,都可以选择安装GNU实用程序。