awkコマンドを使用して、3番目の列が数値/日付ではない行を見つけようとします。 3つの列を持つカンマ「、」フィールドで区切られたファイルがあり、コードは「、「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
これはどうですか。 3番目のフィールドに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,