You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Shell命令为含Epoch时间的数据追加人类可读日期列?

为包含Epoch时间戳的行追加人类可读日期的最简方法

我有如下格式的数据:

1234567890.123 'time1' 2345678901.234 'time2' 3456789012.345 'time3' 

其中第一个数字为Epoch时间戳,我希望为每行追加一列人类可读的日期。我尝试过类似cut -c 1-10 | xargs -I {} date -r {}的命令,但该方法无法保留行内其他数据。请问实现此需求的最简方式是什么?

最简解决方案:使用awk处理

最简单的方式是借助awk工具——它能在处理每行数据时,同时完成时间戳转换和原内容保留,不用拆分再拼接,一步到位。

通用版本(兼容多数系统)

如果你的系统date命令不支持内置时间戳转换,或者你想要更灵活的外部命令调用,用这条命令:

awk '{
    ts = int($1)
    cmd = "date -r " ts
    cmd | getline human_date
    close(cmd)
    print $0, human_date
}' your_input_file

逻辑拆解:

  • ts = int($1):提取第一个字段的整数部分(忽略Epoch时间戳的小数位,date只需要整秒数)
  • cmd = "date -r " ts:构造调用date命令的字符串
  • cmd | getline human_date:执行命令并读取输出到变量
  • close(cmd):关闭命令管道,避免资源占用
  • print $0, human_date:打印原行所有内容,再追加转换后的日期

高效简化版(GNU环境适用)

如果你用的是GNU awk(大部分Linux系统默认是这个),可以直接用内置的日期函数,不用调用外部date命令,速度更快:

awk '{print $0, strftime("%Y-%m-%d %H:%M:%S", int($1))}' your_input_file
  • strftime("%Y-%m-%d %H:%M:%S", int($1)):内置函数直接把整数时间戳转成指定格式的日期,你可以把%Y-%m-%d %H:%M:%S换成%c(系统默认可读格式)或者其他你需要的格式。

示例输出

用简化版命令处理你的示例数据,会得到:

1234567890.123 'time1' 2345678901.234 'time2' 3456789012.345 'time3'  2009-02-18 03:31:30

内容的提问来源于stack exchange,提问作者cohoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:05:22