我有一个看起来像这样的文件:
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
你能帮我吗?
最佳答案
您可以使用
awk '$2 !~ /^.?[OI]/' file
见
awk
online demo .'$2 !~ /^.?[OI]/'
意思是:打印字段 2 不匹配的所有行:^
- 行首 .?
- 任意 1 个可选字符 [OI]
- 要么 O
或 I
. 前两个字母必须是字母,替换
.
与 [[:alpha:]]
或 [A-Z]
,只需根据您的要求选择最好的。
关于awk - 根据列的前两个字母过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415323/