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

如何批量将Unix时间戳转为可读格式并追加至数据列?

解决方法

原脚本的问题根源

你用echo $time时没加双引号,bash会把变量里的换行符替换成空格,三行内容合并成一行传给awk,awk只提取这一行的第2列(也就是第一个时间戳),所以循环只执行了一次。

方案一:修正原脚本(仅输出转换后的时间)

给echo的变量加上双引号,保留换行让awk逐行处理:

var=$(echo "$time" | awk -F ',' '{print $2}')
for secs in $var
do
    date -d @$secs
done

但这个方案只能单独输出转换后的时间,没法追加到原行末尾,更推荐下面的方法。

方案二:用awk直接完成(推荐,一次输出目标格式)

GNU awk自带strftime函数,可直接将Unix时间戳转成可读格式,一次处理所有行:

echo "$time" | awk -F ',' -v OFS=',' '{print $0, strftime("%a %b %d %Y %r", $2)}'

参数说明:

  • -F ',':指定输入分隔符为逗号
  • -v OFS=',':指定输出分隔符为逗号
  • strftime("%a %b %d %Y %r", $2):将第2列的时间戳转换为你需要的格式(%r对应12小时制时分秒,和示例格式匹配)

执行后直接输出目标结果:

1,1708746085,apples,cars,Fri Mar 15 2024 07:37:39 PM
2,1709764378,pears,bus,Tue Mar 26 2024 02:32:58 PM
3,1709875892,orange,truck,Wed Mar 27 2024 05:31:32 PM

方案三:适配不支持strftime的awk(如BSD awk)

如果你的awk版本没有strftime,可以在awk里调用date命令获取转换结果:

echo "$time" | awk -F ',' -v OFS=',' '{
    cmd = "date -d @" $2 " +\"%a %b %d %Y %r\""
    cmd | getline dt
    close(cmd)
    print $0, dt
}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:41:10