날짜 범위 선택을 위한 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}'

관련 정보