0

次のデータがあります。

====> バックグラウンド プロセスの START LOG: HRBkg Hello on 2013/09/27 23:20:20 ログ レベル 3
09/27 23:20:20 I バックグラウンド プロセスは処理モデルを使用しています #: 3
09/27 23: 20:23 I
09/27 23:20:23 I -- 外部キーのインポートを開始
====> バックグラウンド プロセスのログを開始: HRBkg Hello on 2013/09/30 07:31:07 ログ レベル 3
09/30 07:31:07 I バックグラウンド プロセスは処理モデルを使用しています #: 3
09/30 07:31:09 I
09/30 07:31:09 I -- 外部キーのインポートを開始しました

====> START LOG.....の最後の一致の後に残りのファイルの内容を抽出する必要があります/
を何度も使用しようとしましたが、正規表現で変数を利用できないようです。私が含めようとしていた変数は日付 (2013/09/30) でした。これが行を一意にするものだからです。 私はマシン上にあり、使用できません。sedawkawk
HP-UXgrep -A

何かアドバイス?

4

8 に答える 8

3

ファイル内の最後のエントリを見つけるためだけに、特定の時間をテストする必要はありません。

awk '
    BEGIN { ARGV[ARGC] = ARGV[ARGC-1]; ARGC++ }
    NR == FNR { if (/START LOG/) lastMatch=NR; next }
    FNR == lastMatch { found=1 }
    found
' file
于 2013-10-01T02:12:05.340 に答える
1

これはうまくいくかもしれません(GNU sed):

a=2013/09/30
sed '\|START LOG.*'"$a"'|{h;d};H;$!d;x' file
于 2013-10-01T04:16:34.343 に答える
0

これは最後の を出力しSTART LOG、最後のブロックにフラグを設定して出力します。

awk 'FNR==NR  { if ($0~/^====> START LOG/) f=NR;next} FNR>=f' file file

変数を使用できますが、別の日付の別のファイルがある場合は、事前に日付を知る必要があります。

var="2013/09/30"
awk '$0~v && /^====> START LOG/ {f=1}f' v="$var" file
====> START LOG for Background Process: HRBkg Hello on 2013/09/30 07:31:07 Log Level 3
09/30 07:31:07 I Background process is using processing model #: 3
09/30 07:31:09 I
09/30 07:31:09 I -- Started Import for External Key
于 2013-10-01T04:53:02.580 に答える
0

記録として、変数を Awk の正規表現に対して、またはその逆に簡単に一致させることができます。

awk -v date='2013/09/30' '$0 ~ date {p=1} p' file

p入力行が日付と一致する場合は 1 に設定され、pゼロ以外の場合は出力されます。

(Awk の一般的な形式は条件 { アクション }であり、アクションのブロックはオプションであることを思い出してください。省略した場合、デフォルトのアクションは現在の入力行を出力することです。)

于 2013-10-01T03:57:19.030 に答える
0

perlで答えてください:

ログが想定されている場合filelog.txt

my @line;

open (LOG, "<filelog.txt") or "die could not open filelog.tx";

while(<LOG>) {
   @line = $_;
}

my $lengthline = $#line;
my @newarray;
my $j=0;

for(my $i= $lengthline ; $i >= 0 ; $i++) {
  @newarray[$j] = $line[$i];
  if($line[$i] =~ m/^====> START LOG.*/) {
    last;
  }
  $j++;
}

print "@newarray \n";
于 2013-10-01T06:40:25.637 に答える
0

これはPythonの1つです:

#!/usr/bin/python

import sys, re

for fn in sys.argv[1:]:
    with open(fn) as f:
        m=re.search(r'.*(^====> START LOG.*)',f.read(), re.S | re.M)
        if m:
            print m.group(1)

次に実行します。

$ ./re.py /tmp/log.txt
====> START LOG for Background Process: HRBkg Hello on 2013/09/30 07:31:07 Log Level 3
09/30 07:31:07 I Background process is using processing model #: 3
09/30 07:31:09 I
09/30 07:31:09 I -- Started Import for External Key

ビットを除外する場合は====> START LOGS..、正規表現を次のように変更します。

r'.*(?:^====> START LOG.*?$\n)(.*)'

于 2013-10-01T02:31:45.560 に答える