如何提取两个时间戳之间的日志,行可能或可能不以日期时间开头

如何提取两个时间戳之间的日志,行可能或可能不以日期时间开头

如何提取两个时间戳之间的日志,行可能以也可能不以日期时间开头。我在下面尝试,它只是提取仅以日期时间开头的行。日期时间格式为2014-04-07 23:00

$ awk \
  '$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]/
      {
        if ($1" "$2 >= "2014-04-07 23:00")     p=1;
        if ($1" "$2 >= "2014-04-08 02:00")  p=0;
      }
    p { print $0 }' log

这是我的示例数据:

2014-04-07 22:59:10.001 agaggagag  
gagagg 
2014-04-07 23:40:33.345 aegsgssdh  
wqtqttqtqtq  
post  
agggsdgg  
2014-04-08 01:00:54.777 ggsdgwettwetewt  
cvdgwetegdkiytitityi  
error 
2014-04-08 02:02:22.009 qwwqtwtwebbcbewdhshsdh  
asgsaftewtewt  
1253536443755475  
2014-04-08 10:55:34.934 etwtewtewppip  
jklhlljkjvncncmmm  
sghywywywywyw  

我想提取2014-04-07 23:00和之间的所有数据2014-04-08 02:00

答案1

模式匹配中的 RE 开头,^将表达式绑定到行的开头。如果您想在任何地方匹配您的表达式,则需要将其删除。

您的if...语句假设日期/时间字段位于$1和中$2,这也(根据定义)不一定正确。试试这个(它未经测试,因为我没有你的数据样本)

awk '
    {
        if (match($0, /\<[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]\>/))
        {
            s = substr($0, RSTART, RLENGTH)            
            if (s >= "2014-04-07 23:00") p=1
            if (s >= "2014-04-08 02:00") p=0
        }
    }
    p { print $0 }
' log

样本数据的输出

2014-04-07 23:40:33.345 aegsgssdh
wqtqttqtqtq
post
agggsdgg
2014-04-08 01:00:54.777 ggsdgwettwetewt
cvdgwetegdkiytitityi
error

答案2

将脚本的开头更改为

$ awk \
  '$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0- 9]/\
      {

或者

$ awk \
  '$0 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0- 9]/{

目前,您的脚本有三个语句:

  1. 如果该行匹配/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-2][0-9]:[0-5][0-9]/,则打印它(默认操作)。
  2. 对于所有行(默认条件),p如果在范围内,则设置为 1 $1 $2,如果不在范围内,则设置为 0。
  3. 如果p非零,则打印该行。

所以每一个看起来像日期时间戳(基于您的正则表达式)的行将根据语句 1 进行打印。选择范围内包含日期时间戳的每一行将根据语句 2 和 3 之间的交互进行打印。

显然,您希望将条件 1 和语句 2 绑定在一起。

答案3

我为您的目的创建了一个简单的脚本。检查这对您有帮助吗

[upkar@server2 一]# cat logxtract.sh

L1=$(grep -n "2014-04-07 23:[0-9][0-9]" log | awk -F":" '{print $1}')

L2=$(grep -n "2014-04-08 02:[0-9][0-9]" log | awk -F":" '{print $1}')

sed -n $L1,"$L2"p 日志

脚本的输出

[upkar@server2 一]# sh logxtract.sh

2014-04-07 23:40:33.345 aegsgssdh

wqtqttqtqtq

post

agggsdgg

2014-04-08 01:00:54.777 ggsdgwettwetewt

cvdgwetegdkiytitityi

error

2014-04-08 02:02:22.009 qwwqtwtwebbcbewdhshsdh

相关内容