使用awk标准化日志数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用awk标准化日志数据相关的知识,希望对你有一定的参考价值。
Hellow伙计们!
我正在从需要提交给管理人员的日志文件中解析数据。日志遵循以下结构:
USER DATE LOGIN
USER DATE LOGIN *single tab between DATE and LOGIN
USER DATE LOGOUT *double tab between DATE and LOGIN
USER DATE LOGIN
USER DATE LOGOUT
USER DATE LOGIN
USER DATE LOGOUT
USER DATE LOGOUT
USER DATE LOGOUT
几乎所有内容都已经达到我需要的格式,例如:
adriana 20200101 10:20:00
adriana 20200101 10:30:00
adriana 20200101 10:40:00
连续两次登录意味着连接丢失。现在,我们不知道连续注销对调查意味着什么。
我需要对此数据进行一点标准化,以便在我编写的其余脚本中更有用。
我需要:
对于相同的用户和日期,在连续的LOGINS上:在每个事件之间添加一个新行,具有与前一行相同的内容,但是将LOGIN替换为LOGOUT。对于相同的USER和DATE,在连续的LOGOUTS上:在每个事件之间添加一个新行,并具有与前一行相同的内容,但将LOGOUT替换为LOGIN。
示例:
adriana 20200101 10:20:00
adriana 20200101 10:30:00
adriana 20200101 10:40:00
adriana 20200101 10:50:00
应成为:
adriana 20200101 10:20:00
adriana 20200101 10:20:00
adriana 20200101 10:30:00
adriana 20200101 10:40:00
adriana 20200101 10:40:00
adriana 20200101 10:50:00
我正在尝试使用AWK进行此操作,但是我不确定这是否是正确的工具。直到现在,我一直手动进行操作,但是在第3000行之后,我很累。还有12,000行。
有人可以协助我指出我要学习的方向吗?
提前感谢!
答案
awk
进行救援!
$ awk 'BEGINFS=OFS="\t"
p==NFprint p1, (p==2?OFS:"") pn1;
p=NF; pn=$NF; p1=$1' file
adriana 20200101 10:20:00
adriana 20200101 10:20:00
adriana 20200101 10:30:00
adriana 20200101 10:40:00
adriana 20200101 10:40:00
adriana 20200101 10:50:00
以上是关于使用awk标准化日志数据的主要内容,如果未能解决你的问题,请参考以下文章