删除时间字段中的点和冒号

时间:2016-12-12 13:01:46

标签: regex bash awk

我在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         E..2..@.@.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         E..2..@.@.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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

答案 2 :(得分: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