zoukankan      html  css  js  c++  java
  • awk例子解释,引入环境变量

    以下为网上一个帖子的需求


    操作系统为aix,日志文件比较大,我想从一个日志文件中取出一个关键字的第一次出现和最后出现之间的信息,如下:

    文件:1.log
    abc abc abcabc
    abc lzjabc abcabc
    abcabc abc abcabc abclzj
    abcabc abc
    abcabcabc abc abc
    abc lzj abc abc
    abc
    abc

    ----------------------------------------------------------------------------------------------------------------------

    对   awk '/lzj/{print s$0;p=1;s="";next}p{s=s$0" "}' 1.log  的解释

    1.  /lzj/ 正则表达式逐行匹配含有lzj的行,匹配到第一行的时候执行/lzj/后面第一个花括号的内容{{print s$0;p=1;s="";next};由于被匹配,执行结果是print s$0  此时s为新变量且为空,而且s和$0之间没有逗号,类似print$0$1效果,实际结果为print$0,在让p=1,p为真,再把s变量置空,next跳过p{s=s$0" "}' 代码段;

    2,紧接着上面被匹配的下一行,如果仍然匹配,则如同1的执行效果,如果不匹配,及不包含lzj,/lzj/为假,/lzj/后第一个花括号/{print s$0;p=1;s="";next}不执行,但是执行p{s=s$0" "}' 没有print (这里类似PATH=/opt/software/bin:$PATH),由于p一直为真,一直持续到下一次/lzj/被匹配

    3,承接上面,未被匹后的下一次匹配。首先print出s,这里的s为之前所有未被匹配的行,再print改匹配的行$0,即为print s$0的解释,然后置空s,后面next,跳过p之后的代码段,虽然p为真,s保存之后的为匹配的行,但是如果之后一直没有/lzj/,此后便不再执行print动作。

    另外p的作用是控制第一次print,如果不控制后面{s=s$0" "}'段的执行条件,则会一直执行,因为就算为被匹配,但是未被匹配的行被s变量通过apend的方式追加,直到下一次遇到/lzj/,则会一次性把之前的s  print出来

    引入环境变量

    d=2018-09-03;kubectl logs mscshuta-6zf23 |awk  '/'$d'/{print $0}'

    for i in `kubectl get pod | awk '{print $1}'|grep -v NAME`
    do kubectl logs $i | awk '/^[^]?'$(date -d "-1 day" +%F)' /{print s$0;p=1;s="";next}p{s=s$0" "}' > /root/logs/$(date -d "-1 day" +%F)-$i
    done

  • 相关阅读:
    第二次结对编程作业
    第一次结对编程作业
    第一次个人编程作业
    第一次博客作业
    第09组 Alpha冲刺(4/6)
    第09组 Alpha冲刺(3/6)
    第09组 Alpha冲刺(2/6)
    第09组 Alpha冲刺(1/6)
    第09组 团队Git现场编程实战
    第09组 团队项目-需求分析报告
  • 原文地址:https://www.cnblogs.com/gandefeng/p/9564179.html
Copyright © 2011-2022 走看看