查找文本文件中的所有时间戳,并使用SED或AWK linux将此时间戳转换为(UTC-5)格式 &g



我在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:

相关内容

  • 没有找到相关文章

最新更新