0

関数TARGETは空かどうかを確認する必要があり、空の場合は繰り返したいのですが、今回c1TIME=$hours:$minutes:[0-9][0-9] は実行して、まだ空の場合c1TIME=$hours:$c1minutes[0-9]:[0-9][0-9] は停止して情報をエコーする必要があります。

$1エラーのある標準ログファイルです

$TIMEこのパターンの時間の文字列HH:MM:SS これが混乱している場合は申し訳ありませんが、助けていただければ幸いです

この関数の詳細:
最初にたとえばランダムな時間がかかり、12:34:56c1seconds で "5" だけを読み取ります。次に、 Targetc1TIME12:34:5[0-9]
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
  }
4

2 に答える 2

0

いつでも再帰を使用できます。level=0aをグローバル レベルに保ち、関数を再度呼び出します。

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その前に?

于 2013-05-15T10:47:14.243 に答える