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
形而上者谓之道 形而下者谓之器。