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,