두 타임스탬프 사이의 grep 데이터

두 타임스탬프 사이의 grep 데이터

저는 리눅스 초보자입니다.

    Oct 07  11:00:33 some text
    Oct 07  12:00:33 some text
    Oct 08  14:00:33 some text
    Oct 08  21:00:33 some text
    Oct 09  21:00:33 some text

나는 사이에 로그를 grep하고 싶다2015-07-08 12:00:33도착하다2015-07-10 21:00:31

내가 받은 이 코드로 할 수 있을 것 같아여기,

sudo awk -v start='2015-07-08 12:00:33' -v end='2015-07-10 21:00:31' '
 BEGIN{ gsub(/[:-]/," ", start); gsub(/[:-]/," ", end) }
      { dt=$1" "$2; gsub(/[:-]/," ", dt) }
 mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)' a.txt

로그 날짜/시간 형식이 다음과 같을 때 테스트했습니다.2015-10-09 21:00:33

하지만 내 로그 날짜 시간 형식은Oct 09 21:00:33

그래서 어떻게 변환하는지 모르겠어요2015-10-09 21:00:33

답변1

기록한 타임스탬프는 쉽게 구문 분석할 수 없으므로 구문 분석 가능하고 허용 가능한 형식으로 변환해야 합니다.mktime() 함수이것은YYYY MM DD HH MM SSYYYY 부분이 누락되었으므로 아래 코드에 더미 연도 "2022"를 추가했습니다.

월 이름을 해당 월 번호로 변환하는 사용자 정의 Month2num() 함수도 있습니다.

gawk -v year='2022'  -v start='2022 10 07 12 00 33' -v end='2022 10 08 21 00 31' '
function month2num(mon ){
     return sprintf("%02d", (index("JanFebMarAprMayJunJulAugSepOctNovDec", mon)+2)/3)
 }

{ dt=year" "month2num($1)" "$2" "$3; gsub(/[:-]/," ", dt) }

mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)' infile

산출:

    Oct 07  12:00:33 some text
    Oct 08  14:00:33 some text

관련 정보