• linux提取指定行至指定位置


    • grep查找ERROR,定位位置
    • awk打印到指定行数
    • sed打印到文本末尾
    • awk打印到文本末尾

    方法一

    #!/bin/csh -f
    
    if(-f errorlog.rpt) then
        rm -rf errorlog.rpt
    endif
    
    ls *.log > loglst.lst     #将log文件写到指定文件
    
    #loop execute
    set n=`wc -l < loglst.lst`#得到log文件个数(行数)
    echo $n
    set i=1
    while ($i <= $n)
       set line="`awk '{if (NR == $i) print}' loglst.lst`"  #循环得到log文件名
       echo $line
       set linenum=`grep -n " ERROR: Device" $line | awk -F ":" '{print $1}'`  #查找ERROR位置,得到行数
       echo $linenum
       set j=$linenum
       set num=`wc -l < $line`       #得到文件的总行数
       while ($j <= $num )           #使用awk循环打印至行末
           echo "`awk '{if(NR == $j) print}' $line`" >> errorlog.rpt
           @ j ++
       end
    
       @ i ++
    end
    

    方法二

    请教大神得到的多种方法

    #!/bin/csh -f
    
    if(-f errorlog.rpt) then
        rm -rf errorlog.rpt
    endif
    
    ls *.log > loglst.lst
    
    #loop execute
    set n=`wc -l < loglst.lst`
    echo $n
    set i=1
    while ($i <= $n)
       set line="`awk '{if (NR == $i) print}' loglst.lst`"
       echo $line
          
       sed -n '/ ERROR: Device/,$p' $line >> errorlog.rpt   #查找打印至文本末尾
       #awk '/ERROR/,EOF'     $line >> errorlog.rpt
       #awk '/ERROR/{a++}a'   $line >> errorlog.rpt
       #awk 'a;/ERROR/{a++}'  $line >> errorlog.rpt
    
       @ i ++
    end
    
    
  • 相关阅读:
    第13课-信号通讯
    第12课-有名管道通讯
    第11课-无名管道通讯
    第10课-进程控制
    第9课-时间编程
    【JVM 知识体系框架总结】
    【深入浅出-口语】(3):自然发音
    【深入浅出-JVM】(76):classloader
    【深入浅出-JVM】(75):class 装载
    【深入浅出-JVM】(77):SPI
  • 原文地址:https://www.cnblogs.com/OneFri/p/6042992.html
Copyright © 2020-2023  润新知