我正在尝试使用 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,