【问题标题】:Convert time from dd/mm/yyyy hh:mm:ss to unix timestamp in bash script在 bash 脚本中将时间从 dd/mm/yyyy hh:mm:ss 转换为 unix 时间戳
【发布时间】:2016-06-29 09:13:37
【问题描述】:

我浏览了类似的主题,它们帮助我最接近我想做的事情,但没有完全回答我的问题。

我有一个格式为 dd/mm/yyyy hh:mm:ss ($mydate = 26/12/2013 09:42:42) 的日期,我想通过以下命令将其转换为 unix 时间戳:

date -d $mydate +%s

但这里接受的格式是:yyyy-mm-dd hh:mm:ss

所以我做了这个转换:

echo $mydate| awk -F' ' '{printf $1}'| awk -F/ '{printf "%s-%s-%s\n",$3,$2,$1}'

并且有这个输出:

2013-12-26

这很好,现在我尝试在转换之前附加到小时部分:

echo $mydate| awk -F' ' '{printf $1; $hour=$2}'| awk -F/ '{printf "%s-%s-%s %s\n",$3,$2,$1,$hour}'

但是我有这个:

2013-12-26 26/12/2013

似乎没有保留变量$hour。

我是 awk 的新手,我该怎么做?

【问题讨论】:

标签: bash datetime awk


【解决方案1】:

在 awk 中,您可以使用正则表达式作为字段分隔符。在您的情况下,您可能需要执行以下操作,而不是两次使用 awk:

echo $mydate| awk -F' |/' '{printf "%s-%s-%s %s",$3,$2,$1,$4}'

我们使用空格和 / 作为分隔符。前 3 部分是日期字段,第 4 部分是位于空格之后的时间。

【讨论】:

  • 谢谢,这行得通。 “-F' |/' 使用空格和 / 作为分隔符” ==> 完美!
  • 好一个!不需要像我一样分配时间。
【解决方案2】:

这里的问题是,当你说awk '{print $1}' 时,你正在“失去”时间块。

相反,您可以使用单个 awk 命令,例如:

awk -F'[: /]' '{printf "%d-%d-%d %d:%d:%d", $3, $2, $1, $4, $5, $6}'

这会根据:、/ 或空格对记录进行切片,然后将它们以所需的格式重新组合在一起。

测试:

$ echo "26/12/2013 09:42:42" | awk -F'[: /]' '{printf "%d-%d-%d %d:%d:%d", $3, $2, $1, $4, $5, $6}'
2013-12-26 9:42:42

然后将其存储在 var 中并使用 date -d: formatted_date=$(awk '...'); date -d"$formatted_date"。

【讨论】:

  • 这也可以,谢谢。现在我知道在 awk 中可以同时使用多个分隔符,太棒了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 2013-04-18
  • 2011-10-05
相关资源
最近更新 更多