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

如何用AWK或其他方法修正CSV时间戳拼接,实现纳秒精度?

解决方案

思路1:补全f_timestamp2前导零至9位

用awk的sprintf格式化函数,强制将f_timestamp2(第2字段)转为9位数字,缺失部分自动补前导零。表头单独处理,数据行拼接格式化后的字段:

awk -F ',' '
    BEGIN {OFS = ","}
    NR == 1 {print $0, "f_timestamp_nano"; next}
    {print $0, $1 sprintf("%09d", $2)}
' filein.csv > fileout.csv

执行后输出结果:

f_timestamp,f_timestamp2,f_date,f_timestamp_nano
1729448207,303701614,2024/10/20 19:16:47 303701614,1729448207303701614
1729415974,96090458,2024/10/20 19:16:47 096090458,1729415974096090458

思路2:转换f_date为数据库兼容格式

直接解析f_date字段,将日期分隔符从/替换为-,并把末尾的纳秒部分移到秒后用.分隔,生成YYYY-MM-DD hh:mm:ss.sssssssss格式:

awk -F ',' '
    BEGIN {OFS = ","}
    NR == 1 {print $0, "formatted_datetime"; next}
    {
        split($3, dt, /[ ]/);
        split(dt[1], date, /\//);
        formatted_date = sprintf("%04d-%02d-%02d %s.%s", date[1], date[2], date[3], dt[2], dt[3]);
        print $0, formatted_date
    }
' filein.csv > fileout.csv

执行后输出结果:

f_timestamp,f_timestamp2,f_date,formatted_datetime
1729448207,303701614,2024/10/20 19:16:47 303701614,2024-10-20 19:16:47.303701614
1729415974,96090458,2024/10/20 19:16:47 096090458,2024-10-20 19:16:47.096090458

补充说明

  • 思路1适合依赖Unix时间戳的业务场景,从根源上避免因纳秒位数不足导致的时间计算偏差;
  • 思路2直接生成数据库原生支持的时间字符串格式,后续若f_date格式变动,仅需调整split拆分规则和格式化逻辑即可快速适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:26:17