sedコマンドパラメータの時間範囲の設定

sedコマンドパラメータの時間範囲の設定

以下は非常に大きなログファイルから抽出したいサンプルログファイルです。

2017-05-30 23:11:34,629 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking auth agent [accountName=rene1 remoteAddress=STEDGE/172.16.8.3]
2017-05-30 23:11:14,638 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - SSH: Failed login attempt on [172.16.8.1]. Username: "rene1".
2017-05-30 23:10:54,663 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.KeyboardInteractiveAuthentication - SSH: Sent SSH_MSG_USERAUTH_INFO_REQUEST (Password Authentication): 
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - User login attempt has been made from address /172.16.8.1:58222
2017-05-30 23:10:36,415 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Invoking config agent [accountName=rene1 remoteAddress=/172.16.8.1]
2017-05-30 23:10:36,446 INFO [SSHD-TRANSFER-1] com.tumbleweed.st.server.sshd.AuthenticationProviderImpl - Config agent success [accountName=rene1 remoteAddress=/172.16.8.1]



23:10:36を使用してログ全体のチャンクを抽出したいが23:11:34失敗しましたsed。テストしてみましたが、期待した結果がgrep出るawkという希望はありません。それは私に起こったことのログだけを提供し、23:10:36これは私が期待した結果ではありません。これは私の命令です。

sed -n '/23:10:36/,/23:11:34/p' stlog.txt



誰もが動作する方法を知っていますか?私のプログラムは現在のシステム時刻のみを取得し、現在のシステム時刻のみに基づいてログを照会するため、日付なしの時刻のみが含まれます。

ベストアンサー1

ここでは2つの問題を見ることができます。 1)ログが逆順に表示されるものと2)「終了」パターンと一致する複数行があります。

(最後の行の23:10:36,446は最後の2行目の23:10:36,415より遅いですが)

逆順を使用すると、一致する行のみを取得できます。これは、印刷を開始する23:10:36sed印刷を開始し、印刷が見えるまで続くが23:11:34存在しないためです。

パターンを反転すること(以下を参照)が解決策であるように見えますが、パターンが最初に表示されたときに印刷が停止するため、まだ終了パターンと一致する最初の行のみを取得できます。

sed -n '/23:11:34/,/23:10:36/p' stlog.txt

awk問題を解決する必要がある解決策は次のとおりです。

awk -vstart="23:11:34" -vend="23:10:36" \
  '$0 ~ start {p=1} $0 ~ end {e=1} e && $0 !~ end {p=0} p' stlog.txt 

この変数は印刷を制御し、p「終了」パターンが表示された後にのみ消去されます(e1)。そして現在の行はパターンと一致しなくなりました。

おすすめ記事