특정 열과 특정 패턴으로 행을 얻는 방법은 무엇입니까?

특정 열과 특정 패턴으로 행을 얻는 방법은 무엇입니까?

다음과 같은 CSV 파일이 있습니다. (두 번째 열은 날짜 패턴입니다.)

qqq.eee,2015-10-12
rrr-ttt,2015-11-23
aaapppp,2022-01-10
ddd_fff,2017-05-23
zzzbbbb,2013-09-20
nnnmmmm,2015-06-17
wwwwwww,2014-11-20
uuu-uuu,2016-12-10
ppppppp,2015-10-19
kkkkkkk,2016-12-25

다음과 같이 두 번째 열에서 일치하는 행을 가져오고 싶습니다.

year between two number(for example): 2014<= year =<2016
month between two number(for example): 10<= month =<12
day between two number(for example): 20<= day =<30

그런 다음 다음과 같이 출력을 얻습니다.

rrr-ttt,2015-11-23
wwwwwww,2014-11-20
kkkkkkk,2016-12-25

awk를 사용하여 이를 달성할 수 있습니까?

답변1

awk열 및 다중 조건 필터링에 가장 적합합니다. 그러나 이 특정 문제는 다음을 통해 해결될 수도 있습니다.grep

$ grep -E '201[4-6]-1[0-2]-(2[0-9]|30)$' ip.csv 
rrr-ttt,2015-11-23
wwwwwww,2014-11-20
kkkkkkk,2016-12-25
  • -E확장 정규식 사용
  • 201[4-6]2014~2016년 범위
  • 1[0-2]범위는 10~12입니다.
  • 2[0-9]범위는 20~29입니다.
    • 그룹화 및 교대를 사용하여 (2[0-9]|30)20~30의 범위를 제공합니다.
  • $줄 끝
  • 추가 자료:http://www.regular-expressions.info/numericranges.html

답변2

구분 기호 때문에 끝부터 시작까지만 비교하게 되네요.

awk -F[-,] '$NF >= 20 && $NF <= 30 && $(NF-1) >= 10 && 
            $(NF-1) <= 12 && $(NF-2) >= 2014 && $(NF-2) <= 2016' yourfile
  1. NF마지막 필드, $NF값, $(NF-1)마지막 필드 앞의 필드 값 등
  2. $NF일, 월 , 연도$(NF-1)$(NF-2)

관련 정보