温馨提示×

centos怎么批量转换时间戳

小樊
45
2026-08-03 05:01:22
栏目: 智能运维

在 CentOS 上“批量转换时间戳”常见有几种场景,下面按最常用的方式给你示例,你可以直接套用。


一、批量转换【秒级时间戳】为可读时间(最常见)

1️⃣ 单个时间戳

date -d @1700000000

输出示例:

Mon Nov 13 22:13:20 CST 2023

2️⃣ 批量转换(文件里一行一个时间戳)

假设 ts.txt 内容如下:

1700000000
1700001000
1700002000

方法一:while 循环(推荐)

while read ts; do
  date -d "@$ts"
done < ts.txt

方法二:awk

awk '{print strftime("%F %T", $1)}' ts.txt

二、批量转换【毫秒时间戳】

毫秒要除以 1000:

while read ts; do
  date -d "@$(echo "$ts / 1000" | bc -l | cut -d. -f1)"
done < ts.txt

或 awk:

awk '{print strftime("%F %T", $1/1000)}' ts.txt

三、批量转换指定格式(自定义输出)

例如输出:

2023-11-13 22:13:20
while read ts; do
  date -d "@$ts" "+%Y-%m-%d %H:%M:%S"
done < ts.txt

四、日志中批量替换时间戳(sed + date)

假设日志:

error at 1700000000
error at 1700001000
sed -E 's/([0-9]{10})/$(date -d @\1 "+%Y-%m-%d %H:%M:%S")/e' log.txt

⚠️ 注意:-E + e 需要 GNU sed(CentOS 默认支持)


五、批量转换当前目录下文件名中的时间戳

例如:

file_1700000000.log
for f in *; do
  ts=$(echo "$f" | grep -oE '[0-9]{10}')
  [ -n "$ts" ] && echo "$f -> $(date -d @$ts)"
done

六、反向:批量把时间转成时间戳

while read t; do
  date -d "$t" +%s
done < time.txt

七、推荐总结(直接用)

场景 推荐命令
秒级批量 awk '{print strftime("%F %T", $1)}' file
毫秒级 awk '{print strftime("%F %T", $1/1000)}' file
自定义格式 date -d @ts "+%Y-%m-%d %H:%M:%S"
日志替换 sed -E 's/ts/replace/e'

如果你能贴出具体数据格式(文件内容 / 日志片段),我可以帮你写完全可直接用的脚本

0