【问题标题】:grep start and end time from log file- AIX来自日志文件的 grep 开始和结束时间 - AIX
【发布时间】:2016-07-22 21:14:13
【问题描述】:

日志文件如下所示

流程开始 - 2016-04-02-00.36.13

将文件放入 daADadD for 文件将移动到 /sadafJJHFASJFFASJ/

提取文件:-/ASFDSHAF_ABC_2016-04-02.csv /ASFDSHAF_ABC.2016-04-02.csv / ASFDSHAF_ABC.2016-04-02.csv /ASFDSHAF_ABC.2016-04-02.csv /

流程结束 - 2016-04-02-00.36.36

流程开始 - 2016-04-02-10.01.20

将文件放入 daADadD for 文件将移动到 /sadafJJHFASJFFASJ/

提取文件:-/sdshsdhsh_cvb.2016-04-02.csv /sdshsdhsh_cvb.2016-04-02.csv /sdshsdhsh_cvb.2016-04-02.csv

流程结束 - 2016-04-02-10.01.21

模式有多个条目/流程开始 - 2016-04-02/ /流程结束 - 2016-04-02/ 我如何找到之间有模式 /ABC_2016-04-02.csv/ 的条目或块

【问题讨论】:

  • 编辑您的问题以显示给定输入的预期输出。如果您需要在块中搜索某些模式,请确保在示例输入/输出中包含执行和不匹配该模式的块。
  • 再次(也是最后一次)- 编辑您的问题以显示给定输入的预期输出。还可以使用{} 编辑器按钮使您的数据或代码块按原样显示,并消除您尝试添加的任何格式(例如,使用**s 使部分变为粗体)。让您的输入和输出在您的问题中显示与在您的真实文件中显示的相同,以便我们可以针对它测试潜在的解决方案。

标签: awk sed grep aix


【解决方案1】:

您可以使用 sed 来做到这一点(至少使用 GNU sed 4,抱歉没有 AIX sed 可供测试):

# read complete block into hold space
/Process Beginning/,/Process Ending/ {
    H
}

# "test" for csvfile in the block
/Process Ending/ {
    # get hold space (i.e. complete block)
    x 
    # if s did a "substition" (i.e. csvfile occured in the block): print
    s/ASFDSHAF_ABC.2016-04-02.csv/&/p
    # clear hold space for next block
    s/.*// 
    h
}

假设您的日志文件是grplog.log,脚本是grplog.sed,然后像这样运行脚本:sed -n -f grplog.sed grplog.log

说明:

  • 脚本将处理块中的所有行读入第一部分的保留空间。
  • Process Ending 行触发的第二部分使用s 命令的p 标志:如果进行了替换,则打印新的模式空间。由于使用&,新旧模式空间是一样的。

【讨论】:

  • 当我们多次出现进程开始和结束时它会起作用吗??
  • @Sushma 请提供日志文件中的示例行以进行测试。
  • @Sushma 进程开始和结束多次出现是什么意思?几个街区?我用几个块测试了脚本。如果它不适合您,请编辑问题并在示例中提供更多行。
  • 能否请您给我完整的scipt
  • @SushmaBhandary 脚本grplog.sed 是我回答中灰色区域的内容。我在 Linux 上使用 sed 版本 4.2.2,对我来说脚本似乎可以工作。在您编辑之后,我将第 11 行中的 csvfile 替换为您的新文件名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多