1

2 つのログ ファイルがあります。

ログファイル「出力」:

  • 1つはリモートの「リクエスト」を記録します
  • 多くの行、追跡する価値があるのは TRX で始まる
  • TRX Sent: 02-000330408-01 Type: N Timestamp: 20130322-11474100

ログファイル「取得」:

  • 「反応」を記録する
  • 多くの行、追跡する価値があるのは PROC で始まる 1 つだけです
  • PROC: 02-000330408-01 T/S: 20130322 11474500

例に気付いた場合、タイムスタンプの違いは最小限であるはずです。問題は、リモコンが応答しなくなることがあるということです。

私は bash が上手になってきましたが、2 つのタイムスタンプを比較する適切な方法がわかりません。基本的に私が探しているのは次のとおりです。

if DateDiff(TRX and PROC) > 15 minutes: Do Something Amazing
4

2 に答える 2

1

sedタイムスタンプを(GNU)が受け入れることができる形式に変更するために使用dateできます。したがって、AIX システムで GNU の日付を取得できる場合は、次のように実行できます。

function toDateFormat() {
    local ts=$(echo "$1" | sed -E "s/$2.*Timestamp: ([0-9-]+)/\1/")

    ts=$(echo "$ts" | sed -E  "s/([0-9]{8})-([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1 \2:\3:\4/g")

    echo "$ts"
}

function compareLines() {
    local ts_a=$(date -d "$(toDateFormat "$1" "TRX")" +%s)
    local ts_b=$(date -d "$(toDateFormat "$2" "PROC")" +%s)

    local diff=$((ts_a-ts_b))

    if [[ diff -le 0 ]] ;
    then
        diff="$((0-diff))"
    fi

    echo "$diff"
}

A="TRX Sent: 02-000330408-01 Type: N Timestamp: 20130322-11474100"
B="PROC Sent: 02-000330408-01 Type: N Timestamp: 20130322-11374100"

res=$(compareLines "$A" "$B")

if [[ "$res" -ge $((15*60)) ]] ;
then
    echo "Do crazy stuff!"
fi
于 2013-03-22T19:01:50.170 に答える
1

実際の質問のわずかなバリエーションとして、これが機能していると思います。

#!/usr/bin/perl -s
use Time::Local;

$OUT = `tail -500 /log/out.log | grep ^TRX  | tail -1 | cut -c46-62`;
$GET = `tail -500 /log/get.log | grep ^PROC | tail -1 | cut -c28-45`;
my $Start = getDate($OUT);
my $Finish = getDate($GET);

$DiffS = ( $Finish - $Start );
$DiffM = ( $Finish - $Start ) / 60;

print "$DiffS\n";
exit($DiffS);

sub getDate {
  $Y = substr $_[0], 0, 4;
  $M = substr $_[0], 4, 2;
  $D = substr $_[0], 6, 2;
  $h = substr $_[0], 9, 2;
  $m = substr $_[0], 11, 2;
  $s = substr $_[0], 13, 2;

  return timelocal($s,$m,$h,$D,$M,$Y);
}

これはまさに私が尋ねたものではありませんが、すでにセットアップされているシェルスクリプトで使用できる違いを与えることができましたif $I > $Diff then DO MAGICALLY THINGS

#!/bin/ksh
result=$(/usr/bin/logDiff)
print $result
if $result > 60
    ...
于 2013-03-22T20:36:44.987 に答える