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

여기에서 두 가지 문제를 볼 수 있습니다. 1) 로그가 역순으로 나타나는 것과 2) "끝" 패턴과 일치하는 여러 줄이 있습니다.

(마지막 줄의 23:10:36,446은 끝에서 두 번째 줄의 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로).그리고현재 줄은 더 이상 패턴과 일치하지 않습니다.

관련 정보