该函数必须检查TARGET
是否为空,如果它为空,我希望它重复,但这次是c1TIME=$hours:$minutes:[0-9][0-9]
然后运行它,如果它仍然是空的那么c1TIME=$hours:$c1minutes[0-9]:[0-9][0-9]
之后它应该停止并回显一些信息。
$1
是带有错误的标准日志文件
$TIME
此模式中的时间字符串HH:MM:SS
如果这令人困惑,我很抱歉,我很感激任何帮助
这个功能的作用是什么:
首先,它需要一个随机时间,例如12:34:56
,只读
c1seconds中的“5”,然后c1TIME
为12:34:5[0-9]
Target现在尝试在日志文件中找到c1TIME字符串所在的行
打印行号
c1DATE
更改了12:34:5[0-9]
在找到的时间,例如12:34:56
其余的实际上并不重要
TARGET
为空时它必须再次运行,那么如何在执行函数时或之后检查TARGET?
function check() {
c1seconds=`echo $TIME | awk '{print substr ($1,7,8)}' | head -1c`
c1TIME=$hours:$minutes:$c1seconds[0-9]
TARGET=`cat -n $1 | grep "$c1TIME" | awk '{printf "%s\n",$1}' | awk 'sub("$", "")'| head -1`
c1DATE=`cat $1 | grep "$c1TIME" | grep -Eo "[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}" | head -1`
EXCEPTION=`tail -$[$WINDOW_LINES-$TARGET] $1 | grep -c Exception`
ERROR=`tail -$[$WINDOW_LINES-$TARGET] $1 | grep -c Error`
SEMAPHORE=`tail -$[$WINDOW_LINES-$TARGET] $1| grep -c semaphore`
echo $TARGET
return 0
}
答案 0 :(得分:1)
你想重复while
目标为空::)所以你走了:
function check() {
c1seconds=`echo $TIME | awk '{print substr ($1,7,8)}' | head -1c`
c1TIME=$hours:$minutes:$c1seconds[0-9]
TARGET=`cat -n $1 | grep "$c1TIME" | awk '{printf "%s\n",$1}' | awk 'sub("$", "")'| head -1`
if [ x$TARGET = x ] ; then
c1TIME=$hours:$minutes:[0-9][0-9]
TARGET=`cat -n $1 | grep "$c1TIME" | awk '{printf "%s\n",$1}' | awk 'sub("$", "")'| head -1`
fi
c1DATE=`cat $1 | grep "$c1TIME" | grep -Eo "[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}" | head -1`
EXCEPTION=`tail -$[$WINDOW_LINES-$TARGET] $1 | grep -c Exception`
ERROR=`tail -$[$WINDOW_LINES-$TARGET] $1 | grep -c Error`
SEMAPHORE=`tail -$[$WINDOW_LINES-$TARGET] $1| grep -c semaphore`
echo $TARGET
}
BTW感觉就像一个丑陋的方式来做你正在做的事情:P
感觉更加丑陋:)但我不知道你想要完成什么或者你的输入是什么,所以答案是如上所述。
答案 1 :(得分:0)
你可以随时使用递归。在全局级别保持level=0
并再次调用该函数。
level=0;
function check() {
现在而不是
c1TIME=$hours:$minutes:$c1seconds[0-9]
使用
if [ $level -eq 0 ]; then c1TIME=$hours:$minutes:$c1seconds[0-9]; fi
if [ $level -eq 1 ]; then c1TIME=$hours:$minutes:[0-9][0-9]; fi
if [ $level -eq 2 ]; then c1TIME=$hours:$c1minutes[0-9]:[0-9][0-9]; fi
if [ $level -ge 2 ]; then echo "ERROR"; exit; fi
现在而不是
TARGET=`cat -n $1 | grep "$c1TIME" | awk '{printf "%s\n",$1}' | awk 'sub("$", "")'| head -1`
使用
TARGET=`cat -n $1 | grep "$c1TIME" | awk '{printf "%s\n",$1}' | awk 'sub("$", "")'| head -1`
if [ "x$TARGET" = "x" ]; then ((level++)); check $@; fi
我没有运行这个,所以可能存在拼写错误,但主要思想是递归和检查的数量最多为3,使用简单的if检查递归的深度。您可以修改if
到if else
的系列。此外,如果grep
可以打开文件,为什么cat file
并管道,如果awk
可以在文件中搜索模式,为什么cat file | grep pattern
呢?