【问题标题】:Converting list of dates from a file to timestamp with bash使用bash将日期列表从文件转换为时间戳
【发布时间】:2020-09-10 01:49:37
【问题描述】:

我正在使用 bash,我想将格式为“08-Sep-2020 07:08:49”的日期列表转换为时间戳。 我发现the way 在循环中逐行逐行执行此操作,但如果可能的话,我想在不使用循环的情况下转换整个文件。我在想像“cat /tmp/file | <some_command>”这样的一行代码

示例文件内容:

08-Sep-2020 03:07:04
08-Sep-2020 02:20:46
08-Sep-2020 23:25:52

目前我正在使用

date -d "09-Sep-2020 06:52:44" +%s

我想获取另一个文件或相同的文件:

1599530824
1599528046
1599603952

【问题讨论】:

  • 这是否回答了您的问题Converting a file of dates into unix time with awk
  • 或者这个:xargs -n1 date +%s -d <infile >outfile
  • 很好,感谢您的帮助。它有效。命令在行之间添加“1599519600”,但这不是问题,我可以用 sed -n '/1599519600/!p' 剪切这条线
  • 有一个文件是不寻常的;只是一堆日期,只想要一堆秒的输出,所以如果这不是全部你的输入文件包含然后edit您的问题,以提供更具代表性的示例输入/输出,以便我们为您提供帮助。
  • 到目前为止发布的答案中没有任何内容在转换为 YMMV 时间戳时将 TZ 考虑在内。您描述的比较在映射时间戳的 awk 脚本中比在调用 shell 脚本中的外部进行更有用。您可能想问一个更大范围的后续问题,包括您要尝试使用这些时间戳做什么以及您的输入/输出的真实情况。

标签: bash awk sed


【解决方案1】:

使用 GNU 日期

如果你有 GNU(不是 BSD)日期命令,你可以使用 xargs 来迭代你的日期。例如:

$ xargs -I{} -L1 date -d "{}" "+%s" < timestamps 
1599548824
1599546046
1599621952

使用 Ruby 日期时间

另一种选择是使用 Ruby 的 DateTime 模块作为 shell 单线进行转换。例如:

$ ruby -r date -ne 'puts DateTime.parse($_).strftime "%s"' timestamps 
1599534424
1599531646
1599607552

【讨论】:

    【解决方案2】:

    对于 mktime() 使用 GNU awk:

    $ awk -F'[ :-]' '{print mktime($3" "((index("JanFebMarAprMayJunJulAugSepOctNovDec",$2)+2)/3)" "$1" "$4" "$5" "$6)}' file
    1599552424
    1599549646
    1599625552
    

    【讨论】:

      猜你喜欢
      • 2014-10-26
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2016-11-26
      • 2016-10-05
      • 2013-09-27
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多