2016-07-26 3 views
0

コマンドを実行し、* .logファイルで出力を取得するバッチスクリプトがあります。バッチスクリプトを使用して、文字列を検索し、別のファイルの次の行を出力ファイルとして取得します。

は、今私は、ログファイルで見つかった上記の値は、その後、以下にその重症度セクションから次の次の3行を取得する必要がある場合は、以下のつまりのいずれかになります。重大度の値を

Caution 
Critical 
Repaired 

を検索する必要がありますフォーマットを別々の出力ファイルに作成します。

ログファイルの内容:

number=1 
    severity=Informational 
    date=12/01/2012 
    time=07:56 
    description=Maintenance note: sys log cleared through tool 

    number=4 
    severity=Critical 
    date=05/13/2013 
    time=18:03 
    description=Network Adapter Link Down (Slot 0, Port 1) 

final_outputfileで:

severity  date   time Description 
Critical  05/13/2016 18:03 Network Adapter Link Down (Slot 0, Port 0) 
Repaired  06/21/2016 05:39 Network Adapter Link Down (Slot 0, Port 0) 

これまでのところ、私だけ別のfinal_outputファイルを作成することができますが、コンテンツとして、いくつかの初期のログファイル名を取得します。

また、現在の日付から1ヶ月/ 2ヶ月前のログファイル行だけを取得する必要があります。それは次の挑戦になるでしょう。

+0

woahこれは、この最後の数時間の質問では、「シェルスクリプトを使用してファイル内の文字列を見つける」必要があります。何か挑戦が続いていますか? –

答えて

0

これは、入力ファイル内のスペースです。そうでない場合は、それに応じてコードを修正してください。

@echo off 
setlocal 
>out.log echo severity date  time Description 
REM above there are a tabs (two of them between date and time) 
set "wanted=Caution Critical Repaired" 
(
    for /f "tokens=1,2 delims==" %%a in ('type in.log^|findstr "severity= date= time= description="') do (
    if "%%a"==" severity" echo\ 
    REM this is four SPACES above before severity 
    <nul set /p "=%%b " 
    REM above there is a SPACE and a TAB after %%b 
) 
    echo/ 
) >>out.log 
type out.log |findstr /b "severity %wanted%" 
+0

不要な重大度エントリを除外する場所はわかりません。また、スペースがDELIMSリストに含まれる場合は、オプション文字列の最後の文字でなければなりません。あなたのコメントは、タブスペースの代わりにスペースタブで終わることを意味します。 – dbenham

+0

@dbenham:望ましくない重大度があると私は逃しました。修正するのが簡単なはずです(明日 - 今のベッドタイムです)。スペースは最後の文字でなければなりませんか? "Space Tab"は私のために働く、 "Tab Space"はそうではない。 – Stephan

+0

非常に確かです - それは長い間ルールでした。スペースは、文字列の最後の文字でない限り、オプション文字列内のトークン区切り文字です。 – dbenham

関連する問題