我已阅读以下问题:Convert from Unix time at the command line和Convert Any Format In Unix。我尝试了几种不同的方法将2017-10-12 00:34:26
格式的时间date "+%F %T"
转换为date -R
格式或Thu, 12 Oct 2017 00:34:26 -0400
。
由于我需要转换如下所示的日期列表,我使用$etime
作为变量仅用于文件的一行(直到我使用它为止)。
file1
:
2017-10-12 00:22:26
2017-10-12 00:25:26
2017-10-12 00:28:26
2017-10-12 00:31:26
2017-10-12 00:34:26
第一次尝试:
etime=$(echo "2017-10-12 00:34:26"); date -Rd @$etime
第二次尝试:
etime=$(echo "2017-10-12 00:34:26"); | gawk '{print strftime("%c", $0)}'
虽然这两个都不起作用,但我希望让它们工作,然后只为file1
中的每一行循环命令,结果将是:
Thu, 12 Oct 2017 00:22:26 -0400
Thu, 12 Oct 2017 00:25:26 -0400
Thu, 12 Oct 2017 00:28:26 -0400
Thu, 12 Oct 2017 00:31:26 -0400
Thu, 12 Oct 2017 00:34:26 -0400
有谁知道在列表中转换这些日期格式的有效方法?非常感谢您对该问题的帮助和支持。
答案 0 :(得分:1)
GNU awk 解决方案:
awk '{ gsub(/[-:]/," "); print strftime("%c %z",mktime($0)) }' file
%c
- 区域设置的“适当”日期和时间表示。 (这是" C"语言环境中'%A%B%d%T%Y'。)
%z
- “+ HHMM”格式的时区偏移量(例如,生成RFC 822 / RFC 1036日期标题所需的格式)
答案 1 :(得分:1)
这需要-f
选项的GNU日期:
date -R -f file1
导致
Thu, 12 Oct 2017 00:22:26 -0400
Thu, 12 Oct 2017 00:25:26 -0400
Thu, 12 Oct 2017 00:28:26 -0400
Thu, 12 Oct 2017 00:31:26 -0400
Thu, 12 Oct 2017 00:34:26 -0400
来自date
手册页:
一次
-f
,--file=DATEFILE
像--date
;每行DATEFILE
和
-d
,--date=STRING
显示时间由STRING
描述,而不是'现在'