猿问

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

原始日志为:
[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:
abc
wvu
xxx
最终想的到相同x值的后面一样减去前面一行的t值。即:
abc:
sdjljst=3
sdswst=14
wvu:
sdsdesst=9
想问一下,awk或者python脚本有没有合适的处理方式?
慕尼黑5688855
浏览 1049回答 2
2回答

三国纷争

#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.logabcwvuxxxawk-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=3sdswst=14wvu:sdsdesst=9

蝴蝶不菲

大概像這樣:#datalog="""[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"""#codeimportrefromcollectionsimportdefaultdictdic=defaultdict(list)golden_x,golden_t=None,Noneforlineinlog.split('\n'):line=line.strip()ifnotline:continuem=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()#resultsabc:sdjljst=3sdswst=14wvu:sdsdesst=9我回答過的問題:Python-QA
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答