Bash에서 월, 날짜 및 시간별로 로그 파일 필터링

Bash에서 월, 날짜 및 시간별로 로그 파일 필터링

Apr 24 10:00:00.000000다음 로그 사이 및 다음 로그 내에서 데이터를 가져오고 싶지만 Apr 25 24:00:00.999999이 작업을 수행하는 방법을 잘 모르겠습니다.

files/file1:Apr 22 02:47:00.663117 somedata    
files/file1:Apr 23 04:47:00.663127 somedata    
files/file1:Apr 24 05:47:00.663137 somedata    
files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 01:47:00.663147 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata    
files/file1:Apr 26 23:47:00.663177 somedata

다음 명령을 사용해 보았지만 이는 시간별로만 필터링하고 날짜를 고려하지 않습니다.

awk -v start=10:00:00.000000 -v stop=24:00:00.999999 'start <= $3 && $3 <= stop'

나는 단지 다음 데이터를 얻고 싶습니다 :

files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 01:47:00.663147 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata

이 문제를 해결하는 데 도움을 줄 수 있는 사람이 있나요? 또한 필터링할 때 월을 고려하는 것이 유용합니다.

답변1

매우 간단하게 날짜 필터에 더 많은 변수를 추가할 수 있습니다.

awk -v start_day=24 -v stop_day=25 -v start_time=10:00:00.000000 -v stop_time=24:00:00.999999 'start_day <= $2 && $2 <= stop_day && start_time <= $3 && $3 <= stop_time' file

생산하다

files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata

우리는 시간을 오전 10시 이하로 맹목적으로 필터링했기 때문에 4월 25일 라인을 놓쳤습니다. 우리가 해야 할 일은 첫째 날 시간을 필터링하는 논리 테스트를 구현하는 것뿐입니다.

awk -v start_day=24 -v stop_day=25 -v start_time=05:00:00.000000 -v stop_time=05:00:00.999999 'start_day <= $2 && $2 <= stop_day && (start_time <= $3 || start_day != $2) && $3 <= stop_time' file

생산하다

files/file1:Apr 24 10:47:00.663137 somedata    
files/file1:Apr 25 01:47:00.663147 somedata    
files/file1:Apr 25 23:47:00.663157 somedata    
files/file1:Apr 25 23:47:00.663167 somedata 

몇 달 동안은 같은 아이디어를 따를 수 있지만 Apr을 04로 변환하고(전처리 또는 awk 매직?) <= =>를 적용해야 합니다.

관련 정보