【问题标题】:Convert epoch columns to human readable format将纪元列转换为人类可读的格式
【发布时间】:2021-06-21 15:39:36
【问题描述】:

我正在使用 bash 脚本将数据输出到文本文件。输出文件的前两列是纪元格式,我试图弄清楚如何添加到 bash 脚本以将这些列转换为人类可读的格式。

我的脚本:

aws backup list-recovery-points-by-backup-vault --backup-vault-name "${VAULT_NAME}" --query "reverse(sort_by(RecoveryPoints, &RecoveryPointArn))[*].{RecoveryPoints: RecoveryPointArn, CreationDate: CreationDate, CompletionDate: CompletionDate}" --output table > getList.txt

getList.txt 的示例输出:

|  1607750797.22 |  1607749558.24 |  arn:aws:backup:us-west-1:010101010101:recovery-point:z0ab4c11-000d-4aaa-v01d-100z27zz32ab   |

|  1610688137.88 |  1610687158.08 |  arn:aws:backup:us-west-1:010101010101:recovery-point:a01q84c9-2035-1234-baf7-8aaa35aa111a   |

在导出到 getList.txt 的过程中,如何将第一列和第二列的输出转换为人类可读的格式?我可以在脚本中使用类似以下的内容吗:

awk 'BEGIN {FS=OFS="|"}{$1,$2=strftime("%c",$1, $2)} {print}'

非常感谢任何帮助和建议。

【问题讨论】:

  • 如果将输出设置为 json 而不是 table,这看起来可能会有所帮助:stackoverflow.com/questions/36853202/…
  • 除了尝试同时进行两种转换之外,awk 代码表面上并非不合理。如果你把它分成两个单独的任务,我觉得它看起来很合理。
  • 请添加“awk”标签

标签: bash awk


【解决方案1】:

您必须逐列处理。另请注意,由于行以 | 开头,因此第一个日期在字段 2(不是 1)中。

$ awk 'BEGIN {FS=OFS="|";} 
         {$2 = strftime("%c", $2); $3 = strftime("%c", $3); } {print}' < foo.txt 
|Sat 12 Dec 2020 07:26:37 AM EET|Sat 12 Dec 2020 07:05:58 AM EET|  arn:aws:backup:us-west-1:010101010101:recovery-point:z0ab4c11-000d-4aaa-v01d-100z27zz32ab   |
|Fri 15 Jan 2021 07:22:17 AM EET|Fri 15 Jan 2021 07:05:58 AM EET|  arn:aws:backup:us-west-1:010101010101:recovery-point:a01q84c9-2035-1234-baf7-8aaa35aa111a   | 

如果你想避免重复strftime() 调用,或者类似的东西(这里甚至更短,但无论如何):

$ awk 'BEGIN {FS=OFS="|"; cols[2]=cols[3]=1} 
         { for (i in cols) $i = strftime("%c", $i) } {print}' < foo.txt 

【讨论】:

  • 谢谢。我可以使用以下命令: gawk 'BEGIN {FS=OFS="|";} {$2 = strftime("%c", $2); $3 = strftime("%c", $3); } {打印}'
【解决方案2】:

在 bash 中,你可以调用 date 命令:

~$ date -d @1607750979.22
Sat Dec 12 06:29:39 CET 2020

-d 指定现在的日期 @epoch 输入一个日期作为纪元

【讨论】:

  • 这是特定于 GNU date,而不是 bash。如果它们有 GNU 日期,它将在没有 bash 的系统上运行,但不一定在没有 GNU 日期的系统上运行,即使它们有 bash。 (在没有安装 GNU coreutils 的 Mac 上试用,f/e)。
猜你喜欢
  • 2019-12-03
  • 2021-11-11
  • 2014-09-06
  • 2017-05-23
  • 2021-02-19
  • 2012-08-16
  • 1970-01-01
  • 2013-01-13
  • 2012-11-12
相关资源
最近更新 更多