用于选择日期范围的 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}'

相关内容