根据一列的前两个字母进行过滤

时间:2019-03-29 10:25:34

标签: awk comparison filtering

我有一个看起来像这样的文件:

345-103832 OI.S.15.0FKOGO   
345-103832 OX.S.5.0FKOGO   
345-103832 QX.S.3.0FKOGO  
345-103832 Qa.S.21.0FKOGO  
345-114643 IX.S.13.0FKOGY

我需要打印第2列不是以“ O”开头,以“ I”开头或在前两个字母中包含“ O或“ I”的所有行。

所以,我想要类似的东西:

awk '{ if( $2 != * O. || $2 != O *. || $2 != * I. || $2 != I *.) print $0}' ...

结果应为:

345-103832 QX.S.3.0FKOGO  
345-103832 Qa.S.21.0FKOGO

您能帮我吗?

1 个答案:

答案 0 :(得分:3)

您可以使用

awk '$2 !~ /^.?[OI]/' file

请参见awk online demo

'$2 !~ /^.?[OI]/'的意思是:打印字段2不匹配的所有行:

  • ^-行首
  • .?-任意1个可选字符
  • [OI]-OI

前两个字母必须为字母,将.替换为[[:alpha:]][A-Z],只需根据需要选择最佳字母即可。