Como posso encontrar linha (s) que as terceiras colunas não são dígitos / data?

2

Eu estou tentando usar o comando awk para encontrar a (s) linha (s) que a terceira coluna não é dígito / data? Suponha que haja uma vírgula de arquivo "," campo separado, tenha três colunas e como código "," medida "," dd / mm / aaaa,

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,

Eu tentei:

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

... mas aparentemente não está correto!

    
por Daniel 22.11.2016 / 22:56

1 resposta

5

Que tal isso. Onde 3º campo não consiste em 0-9 ou /, imprima a linha (que é a ação padrão: não há necessidade de 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

Então código, com saída:

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

Apresentando um pouco mais de verificação, então tem que consistir em nn / nn / nnnn, tente isto.

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

Pode até usar grep se você quiser.

grep -vE '^.*,.*,[0-9/]+,$' x1
code,meas,EXAMDATE,
    
por 22.11.2016 / 23:02