我浏览了类似的线程,它们帮助我最接近我想做的事情,但没有完全回答我的问题。
我有一个格式为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-%sn",$3,$2,$1}'
输出如下:
2013-12-26
这很好,现在我尝试在进行转换之前附加到小时部分:
echo $mydate| awk -F' ' '{printf $1; $hour=$2}'| awk -F/ '{printf "%s-%s-%s %sn",$3,$2,$1,$hour}'
然后我有这个:
2013-12-26 26/12/2013
似乎没有保留变量$hour
。
我是awk的新手,我怎么能这样做呢?
在awk中,您可以使用正则表达式作为字段分隔符。在您的情况下,您可能需要执行以下操作,而不是两次使用awk:
echo $mydate| awk -F' |/' '{printf "%s-%s-%s %s",$3,$2,$1,$4}'
我们使用空格和/作为分隔符。前3部分是日期字段,第4部分是位于空间之后的时间。
这里的问题是,当你说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"