如何找到第三列不是数字/日期的行?

如何找到第三列不是数字/日期的行?

我正在尝试使用 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 或 /,则打印该行(这是默认操作:不需要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,

相关内容