我有一个看起来像这样的文件:
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
您能帮我吗?
答案 0 :(得分:3)
您可以使用
awk '$2 !~ /^.?[OI]/' file
请参见awk
online demo。
'$2 !~ /^.?[OI]/'
的意思是:打印字段2不匹配的所有行:
^
-行首.?
-任意1个可选字符[OI]
-O
或I
。前两个字母必须为字母,将.
替换为[[:alpha:]]
或[A-Z]
,只需根据需要选择最佳字母即可。