如何用sed/awk/split将整数时间戳转换为时间并与日期拼接?
用awk实现时间戳与日期的拼接转换
没问题,这个需求用awk来实现最直观高效,毕竟它天生擅长处理这种结构化的列数据。下面直接上解决方案:
核心命令
awk -F ',' -v OFS=',' '{ # 处理第一个时间戳:拆分小时和分钟,补前导0后和日期拼接 hour1 = sprintf("%02d", int($3/100)); min1 = sprintf("%02d", $3%100); ts1 = $1 " " hour1 ":" min1; # 处理第二个时间戳,逻辑和上面一致 hour2 = sprintf("%02d", int($4/100)); min2 = sprintf("%02d", $4%100); ts2 = $1 " " hour2 ":" min2; # 输出转换后的整行数据 print $1, $2, ts1, ts2; }' input.txt > output.txt
命令解释
-F ',':指定输入数据的分隔符为逗号,把每行拆分成4个字段(Date、Desc、Timestamp1、Timestamp2)-v OFS=',':设置输出的字段分隔符也是逗号,保证输出格式和输入一致sprintf("%02d", ...):用来给不足两位的小时/分钟补前导0,比如330拆成3和30,转成03和30- 最后把原日期和拼接好的时间组合,替换原来的纯数字时间戳,输出整行
测试效果
如果你的输入文件input.txt内容是:
2016-01-01, AAA, 330, 1430 2016-01-02, ABA, 130, 930
运行命令后,output.txt里的内容就是你想要的:
2016-01-01, AAA, 2016-01-01 03:30, 2016-01-01 14:30 2016-01-02, ABA, 2016-01-02 01:30, 2016-01-02 09:30
如果一定要用sed的话,虽然逻辑会绕一些,但也能实现,不过更推荐awk的方案,可读性和维护性都更好。
内容的提问来源于stack exchange,提问作者I Singh
相关产品推荐
相关产品推荐

