首页 > 解决方案 > grep 查找日志文件中不在同一行的两个单词

问题描述

2019/08/20 18:36:29.710 [1cdc10a5-7d27-4cf2-8890-0f8f0b21798c Dispatcher] [INFO ] com.vmware.nfc.platform.streaming.infraprocessors.processors.MetricsInfraProcessor.handleMessage(MetricsInfraProcessor.java:39) - DEBUG - Parsed:metric_entry {
  reference_oid {
    oid: "2:51323330635433366"
  }
  metric_name: "up_time"
  metric_type: COUNTER
  metric_point {
    timestamp: 1566324769337211363
    value: 73743.0
  }
}

我需要在我的日志文件中搜索一个模式,其中 oid 为“2:51323330635433366”,metric_name 为“up_time”。

root$ grep -A3 2:51323330635433366 patten1.log | grep up_time
  metric_name: "up_time"

它给了我一行作为metric_name: "up_time". 我想打印整个块。

我该怎么做?

标签: grep

解决方案


如果您在每个部分之间有一个空行,如下例所示,您可以使用gnu awkRecord Selector 并将其设置为空。

艾克斯数据

2019/08/20 18:36:29.710 [1cdc10a5-7d27-4cf2-8890-0f8f0b21798c Dispatcher] [INFO ] com.vmware.nfc.platform.streaming.infraprocessors.processors.MetricsInfraProcessor.handleMessage(MetricsInfraProcessor.java:39) - DEBUG - Parsed:metric_entry {
  reference_oid {
    oid: "2:51323330635433366"
  }
  metric_name: "up_time"
  metric_type: COUNTER
  metric_point {
    timestamp: 1566324769337211363
    value: 73743.0
  }
}

2019/08/20 18:36:29.710 [1cdc10a5-7d27-4cf2-8890-0f8f0b21798c Dispatcher] [INFO ] com.vmware.nfc.platform.streaming.infraprocessors.processors.MetricsInfraProcessor.handleMessage(MetricsInfraProcessor.java:39) - DEBUG - Parsed:metric_entry {
  reference_oid {
    oid: "2:51323d30635433366"
  }
  metric_name: "up_time"
  metric_type: COUNTER
  metric_point {
    timestamp: 1566324769337211363
    value: 73743.0
  }
}

然后awk将使用块。

awk -v RS="" '/2:51323330635433366/ && /up_time/' file
2019/08/20 18:36:29.710 [1cdc10a5-7d27-4cf2-8890-0f8f0b21798c Dispatcher] [INFO ] com.vmware.nfc.platform.streaming.infraprocessors.processors.MetricsInfraProcessor.handleMessage(MetricsInfraProcessor.java:39) - DEBUG - Parsed:metric_entry {
  reference_oid {
    oid: "2:51323330635433366"
  }
  metric_name: "up_time"
  metric_type: COUNTER
  metric_point {
    timestamp: 1566324769337211363
    value: 73743.0
  }
}

还有其他方法可以做到这一点,具体取决于数据的分离方式。


推荐阅读