sed는 특정 필드 선택을 기반으로 행을 삭제합니다.

sed는 특정 필드 선택을 기반으로 행을 삭제합니다.

입력하다:

coupon,11/2018,1
voucher,04/2018,2

산출:

coupon,11/2018,1

큰 파일에서 mm/year가 있는 11/2018행을 제거하고 싶습니다.$2

답변1

$ awk -F '[,/]' '($3 == 2018 && $2 >= 11) || $3 > 2018' file
coupon,11/2018,1

입력을 쉼표나 슬래시로 구분하여 처리합니다. 입력의 두 번째 필드는 월이 되고 세 번째 필드는 연도가 됩니다.

awk연도가 2018이고 월이 11보다 크거나 같거나 연도가 2018보다 큰 경우 프로그램은 입력을 인쇄합니다.

이렇게 하려면 sed날짜가 2018년 11월 이전인지 이후인지 확인하기 위해 정규식을 사용해야 합니다. 이 점은 매우 중요합니다.

2018보다 큰 4자리 정수와 일치하는 정규식:

[3-9][0-9]{3}|2[1-9][0-9]{2}|20[2-9][0-9]|2019
^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^ 
3000-9999     2100-2999      2020-2099

그래서 sed명령은 다음과 같습니다

$ sed -n -E '\#(1[12]/2018)|([01][0-9]/([3-9][0-9]{3}|2[1-9][0-9]{2}|20[2-9][0-9]|2019))#p' file
coupon,11/2018,1

답변2

암소 비슷한 일종의 영양awk방법:

샘플 파일:

coupon,11/2018,1
voucher,04/2018,2
a,31/2016,b
aa,02/2019,bb

awk -v d=$(date +%s -d"11/01/2018") \
-F',' '{ split($2, a, "/") }mktime(sprintf("%d %d 01 00 00 00", a[2], a[1])) >= d' file

산출:

coupon,11/2018,1
aa,02/2019,bb

관련 정보