3番目の列が数値/日付ではない行を見つける方法は?

3番目の列が数値/日付ではない行を見つける方法は?

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,

おすすめ記事