如何转换日期" +%F%T"到日期列表的RFC 2822格式

时间:2017-10-11 19:59:30

标签: linux bash date datetime awk

我已阅读以下问题:Convert from Unix time at the command lineConvert 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

有谁知道在列表中转换这些日期格式的有效方法?非常感谢您对该问题的帮助和支持。

2 个答案:

答案 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 描述,而不是'现在'