为了账号安全,请及时绑定邮箱和手机立即绑定

linux文本处理,两行时间相减

linux文本处理,两行时间相减

慕尼黑5688855 2019-05-23 18:13:18
原始日志为:[t=123]xyzzda,x=abc[t=126]sdjljs,x=abc[t=140]sdsws,x=abc[t=239]dsjdjs,x=wvu[t=248]sdsdess,x=wvu所有x值有单独文件x.log:abcwvuxxx最终想的到相同x值的后面一样减去前面一行的t值。即:abc:sdjljst=3sdswst=14wvu:sdsdesst=9想问一下,awk或者python脚本有没有合适的处理方式?
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

#cattext.log
[t=123]xyzzda,x=abc
[t=126]sdjljs,x=abc
[t=140]sdsws,x=abc
[t=239]dsjdjs,x=wvu
[t=248]sdsdess,x=wvu
#catx.log
abc
wvu
xxx
awk-F'[]=,]''NR==FNR{a[$0];next}a[$6]{b[$6]=b[$6]"\n"$3"t="$2-a[$6]}{a[$6]=$2}END{for(iinb)printf"%s:%s\n\n",i,b[i]}'x.log,text.log
#输出:
abc:
sdjljst=3
sdswst=14
wvu:
sdsdesst=9
                            
查看完整回答
反对 回复 2019-05-23
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

大概像這樣:
#data
log="""
[t=123]xyzzda,x=abc
[t=126]sdjljs,x=abc
[t=140]sdsws,x=abc
[t=239]dsjdjs,x=wvu
[t=248]sdsdess,x=wvu
"""
#code
importre
fromcollectionsimportdefaultdict
dic=defaultdict(list)
golden_x,golden_t=None,None
forlineinlog.split('\n'):
line=line.strip()
ifnotline:
continue
m=re.match('\[t=(\d+)\](.+),x=(.+)',line)
t,c,x=m.groups()
ifx==golden_x:
dic[x].append((c,int(t)-golden_t))
golden_x,golden_t=x,int(t)
forkey,ctindic.items():
print(key+':')
forc,tinct:
print(c,'t='+str(t))
print()
#results
abc:
sdjljst=3
sdswst=14
wvu:
sdsdesst=9
我回答過的問題:Python-QA
                            
查看完整回答
反对 回复 2019-05-23
  • 2 回答
  • 0 关注
  • 1048 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信