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 매직?) <= =>를 적용해야 합니다.