我在linux ubuntu中有以下问题:我需要在我的文本文件中找到所有字符串时间戳(UTC),并使用bash脚本转换时区UTC -5的时间戳
我需要使用sed或awk脚本
原始文本文件与UTC时间戳是:
FINE: 2021年10月24日14:02:04,SAT:
FINE: 2021年10月24日14:02:04,SAT:
INFO: 2021年10月24日14:02:04,GRDi
FINE: 2021年10月24日14:02:04,GRDi
FINER: 2021年10月24日14:02:05,GRD
FINE: 2021年10月24日14:02:05,x,DB
FINE: 2021年10月24日14:10:44,SERV
CONFIG: 2021年10月24日14:10:44,x,
FINER: 2021年10月24日14:10:44,SAT
FINE: 2021年10月24日14:10:44,SAT
FINE: 2021年10月24日14:10:44,SAT
FINE: 2021年10月24日14:10:44,SAT
FINE: 2021年10月24日14:10:44
我需要转换时间戳(UTC-5)和输出文件将是这样:
FINE: 201/10/24 09:02:04,SAT:
FINE: 201/10/24 09:02:04,SAT:
INFO: 201/10/24 09:02:04,GRDi
FINE: 201/10/24 09:02:04,GRDi
FINER: 201/10/24 09:02:05,GRD
FINE: 201/10/24 09:02:05,x,DB
FINE: 201/10/24 09:10:44,SERV
CONFIG: 201/10/24 09:10:44,x,
FINER: 201/10/24 09:10:44,SAT
FINE: 201/10/24 09:10:44,SAT
FINE: 201/10/24 09:10:44,SAT:
FINE: 201/10/24 09:10:44,SAT:
谢谢你的帮助…
这是实现这一目标的一种方法…保存脚本为minus5h.awk,
{
one = gensub(/^([^ ]+ ).*/, "\1", 1, $0). # store the beginning of line
rest = gensub(/[^,]+,(.*)$/, "\1", 1, $0). # store the rest of the line after the time-spec
split($2, a, "/") # split the date into chunks
split(gensub(/([^,]+).*/,"\1",1,$3), b, ":") # split the time into chunks
c = mktime(a[1] " " a[2] " " a[3] " " b[1] " " b[2] " " b[3]) - 18000 # convert the date into seconds and subtract 5 hours
printf "%s%s,%sn", one, strftime("%Y/%m/%d %H:%M:%S", c), rest # print everything with the new timestamp
}
,然后像这样运行:
awk -f minus5h.awk logfile
FINE: 2021/10/24 09:02:04,SAT:
FINE: 2021/10/24 09:02:04,SAT:
FINE: 2021/10/24 09:02:04,SAT:
INFO: 2021/10/24 09:02:04,GRDi
FINE: 2021/10/24 09:02:04,GRDi
FINER: 2021/10/24 09:02:05,GRD
FINE: 2021/10/24 09:02:05,x,DB
FINE: 2021/10/24 09:10:44,SERV
CONFIG: 2021/10/24 09:10:44,x,
FINER: 2021/10/24 09:10:44,SAT
FINE: 2021/10/24 09:10:44,SAT: