파일에서 한 날짜의 항목을 다른 날짜로 추출합니다.

파일에서 한 날짜의 항목을 다른 날짜로 추출합니다.

첫 번째와 두 번째 필드의 항목이 다음과 같은 방식으로 날짜와 시간인 파일이 있습니다 2015/10/14 00:33:37.

이 파일은 100,000줄이 넘으며 지속적으로 업데이트됩니다. 파일의 항목은 가장 빠른 월요일 00:00:00부터 일요일 23:59:59까지 선택해야 합니다.

2015/10/11 23:55:37 abc1 def1 2015/10/11 23:55:39 abc2 def2 2015/10/11 23:56:19 abc3 def3 2015/10/11 23:56:46 abc4 def4 2015/10/11 23:57:46 abc5 def5 2015/10/12 0:04:25 abc6 def6 2015/10/12 0:04:44 abc7 def7 2015/10/12 0:04:44 abc8 def8 2015/10/12 0:04:44 abc9 def9 2015/10/12 0:04:44 abc10 def10 2015/10/12 0:04:44 abc11 def11 2015/10/12 0:04:44 abc12 def12 2015/10/12 0:04:44 abc13 def13 2015/10/12 0:04:44 abc14 def14 2015/10/12 0:04:44 abc15 def15 2015/10/12 0:04:48 abc16 def16 2015/10/12 0:04:48 abc17 def17 2015/10/12 0:04:48 abc18 def18 2015/10/12 0:04:48 abc19 def19 2015/10/12 0:04:49 abc20 def20 2015/10/12 0:04:49 abc21 def21 2015/10/12 0:08:36 abc22 def22 2015/10/12 0:08:36 abc23 def23 2015/10/12 0:08:36 abc24 def24 2015/10/12 0:08:36 abc25 def25 2015/10/12 0:08:36 abc26 def26 2015/10/12 0:08:36 abc27 def27 2015/10/12 0:08:36 abc28 def28 2015/10/12 0:08:37 abc29 def29 2015/10/12 0:08:37 abc30 def30

답변1

이 셸 스크립트 조각은 지난 월요일부터 다음 일요일까지의 모든 날짜에 대한 형식을 /포함하는 확장 정규식(적절하게 이스케이프된 문자 포함)을 작성합니다 . YYYY/MM/DD그런 다음 이를 사용하여 grep로그 파일을 검색합니다.

DAYS=$(for D in {0..6} ; do 
           date -d "last monday + $D days" +'%Y\\/%m\\/%d'
       done | xargs | 
       sed -e 's/ /|/g'
      )

REGEX="^($DAYS) "

grep -E "$REGEX" logfile.txt

기본 정규 표현식을 사용하려면 마지막 몇 줄을 다음과 같이 변경하세요.

REGEX="^\($DAYS\) "
REGEX=$(printf "%s" "$REGEX" | sed -e 's/\([|]\)/\\\1/g')

grep "$REGEX" logfile.txt

또 다른 옵션은 다음과 같이 쉘의 프로세스 대체 기능과 함께 grep's -F(고정 문자열) 및 (파일) 옵션을 사용하는 것입니다 .-f<( ... )

DAYS=$(for D in {0..6} ; do 
           date -d "last monday + $D days" +'%Y/%m/%d'
       done )

grep -F -f <(echo "$DAYS") logfile.txt

심지어

grep -F -f <( for D in {0..6} ; do 
              date -d "last monday + $D days" +'%Y/%m/%d'
              done ) logfile.txt

참고: 마지막 두 버전은 줄의 시작 부분뿐만 아니라 줄의 어느 곳에서나 이 형식의 날짜와 일치합니다. 제공해 주신 예에 따르면 이는 문제가 될 가능성이 없습니다.

관련 정보