2016-12-12 14 views
1

我从data.log文件中获得以下内容。我希望提取时间值和有效负载的一部分(在有效负载中的deadbeef之后,第三行,从第二个字节开始到最后一个字节,请参阅预期输出)。删除时间字段中的点和冒号

data.log

print 1: file offset 0x0 
ts=0x584819041ff529e0 2016-12-07 14:13:24.124834649 UTC 
type: ERF Ethernet 
dserror=0 rxerror=0 trunc=0 vlen=0 iface=1 rlen=96 lctr=0 wlen=68 
pad=0x00 offset=0x00 
dst=aa:bb:cc:dd:ee:ff src=ca:fe:ba:be:ca:fe 
etype=0x0800 
45 00 00 32 00 00 40 00 40 11 50 ff c0 a8 34 35   [email protected]@.P...45 
c0 a8 34 36 80 01 00 00 00 1e 00 00 08 08 08 08   ..46............ 
08 08 50 e6 61 c3 85 21 01 00 de ad be ef 85 d7   ..P.a..!........ 
91 21 6f 9a 32 94 fd 07 01 00 de ad be ef 85 d7   .!o.2........... 


print 2: file offset 0x60 
ts=0x584819041ff52b00 2016-12-07 14:13:24.124834716 UTC 
type: ERF Ethernet 
dserror=0 rxerror=0 trunc=0 vlen=0 iface=1 rlen=96 lctr=0 wlen=68 
pad=0x00 offset=0x00 
dst=aa:bb:cc:dd:ee:ff src=ca:fe:ba:be:ca:fe 
etype=0x0800 
45 00 00 32 00 00 40 00 40 11 50 ff c0 a8 34 35   [email protected]@.P...45 
c0 a8 34 36 80 01 00 00 00 1e 00 00 08 08 08 08   ..46............ 
08 08 68 e7 61 c3 85 21 01 00 de ad be ef 86 d7   ..h.a..!........ 
91 21 c5 34 77 bd fd 07 01 00 de ad be ef 86 d7   .!.4w........... 

预计输出

我只是想更换的时间字段(UTC)之前的点和冒号,并获得全部价值。

141324124834649,85d79121 
141324124834716,86d79121 

我做了什么至今 我已经提取后场“”但不知道如何替换冒号并获取整个时间值。

awk -F '[= ]' '$NF == "UTC"{split($4,b,".");s=b[2]",";a=15} /de ad be ef/{s=s $a $(a+1);if(a==1)print s;a=1}' data.log 

124834649,85d79121 
124834716,86d79121 

任何帮助,非常感谢。

回答

4
awk '$NF == "UTC"{gsub("[.:]","",$3);s=$3",";a=15} /de ad be ef/{s=s $a $(a+1);if(a==1)print s;a=1}' data.log 

结果:

141324124834649,85d79121 
141324124834716,86d79121 

PS:它可以与getline被简化:

awk '$NF == "UTC"{gsub("[.:]","",$3);s=$3","} /de ad be ef/{s=s $15 $16;getline;print(s $1 $2)}' data.log 
2

你可以提取这样的时间部分:

$ awk '/UTC/ {split($0,a); gsub(/[\.:]/,"",a[3]); print a[3]}' file 
141324124834649 
141324124834716 
1

为UTC部分,(其余代码相同

awk '/UTC$/{gsub(/[\.:]/,"");print $3}' YourFile 
  • 只是删除了“:”和“”,并采取了字段值,该行的其他部分没有这些2个字符,所以不会被修改
  • $ NF测试被替换通过/ UTC $ /,有点更快,更简单(OMHO)

的完整代码

awk -F '[= ]' '/UTC$/{gsub(/[\.:]/,"");s=$3",";a=15} /de ad be ef/{s=s $a $(a+1);if(a==1)print s;a=1}' YourFile 
相关问题