세 번째 열이 숫자/날짜가 아닌 행을 찾는 방법은 무엇입니까?

세 번째 열이 숫자/날짜가 아닌 행을 찾는 방법은 무엇입니까?

awk 명령을 사용하여 세 번째 열이 숫자/날짜가 아닌 행을 찾으려고 합니다. 세 개의 열이 있는 쉼표 "," 필드로 구분된 파일이 있고 코드는 ","measure","dd/mm/yyyy,

97xx574,26.7,12/30/1997,
97xy575,18,12/30/1997,
code,meas,EXAMDATE,
B529ui,28.2,12/30/1997,
B530sx,26.4,12/30/1997,
J487sxv,21.5,12/30/1997,

나는 시도했다:

awk -F "," '/$3[^0-9].*/ {print $0}' <filename> 

...하지만 분명히 이것은 옳지 않습니다!

답변1

이건 어때. 세 번째 필드에 0-9 또는 /가 포함되어 있지 않으면 행을 인쇄합니다(기본 작업: not 필수 입니다 print $0.

$3 = third field
!~ = where does not (!) match regular expression
/  = mark start of regular expression
^  = match start of field
[0-9/]+ = match any of the 0123456789/ characters at least once
$  = match end of field
/  = mark end of regular expression

따라서 코드는 다음과 같이 출력됩니다.

awk -F, '$3!~/^[0-9/]+$/' filename
code,meas,EXAMDATE,

더 많은 검사를 도입하므로 nn/nn/nnnn으로 구성되어야 합니다. 이것을 시도해 보십시오.

awk -F, '$3!~/^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]$/' filename
code,meas,EXAMDATE,

grep원한다면 사용할 수도 있습니다.

grep -vE '^.*,.*,[0-9/]+,$' x1
code,meas,EXAMDATE,

관련 정보