例如一个文本文件:
output1 - 100
output2 - 100
output 3 - 100
output1 - 101
output 3 - 101
output1 - 102
output2 - 101
output 3 - 102
可以把output1, output2, output3看作一组完整的输出进行匹配,如果匹配失败,即某组输出中间有缺失,如何找到相应的位置(该组头行所在的行数)。
要把缺失发生时的次数读出来。
比如,上例中 output2 缺失,要得出此时的次数 101。
可以通过上次成功的output2的次数加1得到,也可以通过本组输出中的output1或output3(如果存在)的次数得到。
-----------------------------------------------------------------
谢谢,忙了一周终于有时间来仔细看一下。说实话,虽然大致明白了些,但还是有点晕。
想了另一个法子,根据行号模3的结果来判断,比如output1:
for num in `sed -n '/output1.*/=' a.log`
do
res=`expr $((num - 1)) % 3`
[ $nu -ne 0 ] && echo $num
done
直接用sed单行命令了话,稍微有点复杂……
sed -n ':start;/output1.*/!{p;d};h;n;/output2.*/!{x;p;x;b start};H;n;/output 3.*/!{x;p;x;b start}' a.log
或者把sed脚本存入一个文件,比如 my.sed,内容为
:start
/output1.*/!{p;d};h;n
/output2.*/!{x;p;x;b start};H;n
/output 3.*/!{x;p;x;b start}
然后用 sed -nf my.sed a.log,也可以。这样能清楚一点。
这个脚本的作用就是依次匹配output1, output2, output 3,如果任何一行没有匹配,那么就把之前匹配的内容都打印出来,然后从头开始匹配output1 ...
sed -n ':start;/output1.*/!{p;d};h;n;/output2.*/!{x;p;x;b start};H;n;/output 3.*/!{x;p;x;b start}' a.log
或者把sed脚本存入一个文件,比如 my.sed,内容为
:start
/output1.*/!{p;d};h;n
/output2.*/!{x;p;x;b start};H;n
/output 3.*/!{x;p;x;b start}
然后用 sed -nf my.sed a.log,也可以。这样能清楚一点。
这个脚本的作用就是依次匹配output1, output2, output 3,如果任何一行没有匹配,那么就把之前匹配的内容都打印出来,然后从头开始匹配output1 ...
温馨提示:答案为网友推荐,仅供参考