저는 리눅스 초보자입니다.
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 SS
YYYY 부분이 누락되었으므로 아래 코드에 더미 연도 "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