日付範囲を選択するためのAWKコマンド

日付範囲を選択するためのAWKコマンド

ユーザーアクティビティの/var/log/secureファイルを監視したいと思います。開始日を指定し、その日付以降に発生する行のみを選択できる必要があります。しばらくawkを使用してきましたが、うまく動作する解決策が見つかりませんでした。動作しているように見えるいくつかのコマンドがありますが、最終的にはファイルからすべての行を選択します。以下のコマンドでは、2019年7月9日以降のすべての項目を選択します。

cat /var/log/secure* | awk '{d=system("date -d "$1 $2, 2019 $3" +%s"); if ( 1562731201 < d );  print}'
awk: cmd. line:1: {d=system("date -d "$1 $2, 2019 $3" +%s"); if ( 1562731201 > d );  print}
awk: cmd. line:1:                                         ^ 2 is invalid as number of arguments for system

date -d @1562644801
Tue Jul  9 00:00:01 EDT 2019

あなたが提供できるどんな助けにも感謝します。

答え1

以下のコマンドが機能すると思います。テストしてみたら、私はうまくいきました。

sed -n '/Jul 9 [0-9]\{2\}:/,$p' /var/log/secure| sed '/Jul 9 [0-9]\{2\}:/d'

答え2

内部引用符をエスケープする必要があります。

"date -d \"$1 $2, 2019 $3\" +%s"

だからそれに変更

'{d=system("date -d \"$1 $2, 2019 $3\" +%s"); if ( 1562731201 < d );  print}'

関連情報