startTimeとendTimeの間の出力ログ行

startTimeとendTimeの間の出力ログ行

内容を含むログファイルがあると仮定すると、次のようになりますapp.log

2018-08-29 07:43:17.123-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:43:17.456-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:44:18.789-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:44:18.779-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:45:19.433-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:45:19.998-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:46:20.658-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:46:20.774-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.

パラメータで指定したタイムスタンプ範囲間のログ行を取得したいと思います。

ログ行は、タイムスタンプで始まる1行ではありません。この行の後には、タイムスタンプが異なる次の行が表示されるまで追加情報が続きます。

したがって、私たちの例では:

2018-08-29 07:43:17.123-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.

1 ログ行です。

だから私はsome command 2018-08-29 07:44:00.000 2018-08-29 07:46:00.000 app.log返されるものを実行したいと思います。

2018-08-29 07:44:18.789-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:44:18.779-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.


2018-08-29 07:45:19.433-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '14' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound request was sent.


2018-08-29 07:45:19.998-0500 CDT [osb_02] [[ACTIVE] ExecuteThread: '28' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO -
 [OSB Tracing] Outbound response was received.

また、パラメータが必ずしもログファイルに存在するわけではありません。

ベストアンサー1

sed '1,/pattern1/d;/pattern2/,$d' app.log問題を解決しなければならない

前述のようにスクリプトで実行するには、 ~/.bashrc の関数は次のようになります。

time_log() {
    pattern1=$1
    pattern2=$2
    file=$3
    sed "1,/$pattern1/d;/$pattern2/,$d" "$file"
}

その後、次を実行できます。

time_log "2018-08-29 07:44:" "2018-08-29 07:46:" app.log

編集する:

不要な削除済みcat

最初の行を含める最も簡単な方法は、grep実行する前に含めることですsed

time_log() {
    pattern1=$1
    pattern2=$2
    file=$3
    grep "$pattern1" "$file"
    sed "1,/$pattern1/d;/$pattern2/,$d" "$file"
}

sedsedの専門家が介入している場合は、これを行うより良い方法があるかもしれません。

おすすめ記事