Awk 基于列的前两个字母进行筛选

Awk 基于列的前两个字母进行筛选,awk,comparison,filtering,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*)

我有一个文件如下所示:

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*)打印$0}。。。
结果应为:

345-103832 QX.S.3.0FKOGO  
345-103832 Qa.S.21.0FKOGO
你能帮我吗?

你可以用

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

“$2!~/^.?[OI]/”
表示:打印字段2不匹配的所有行:

  • ^
    -行首
  • -任意1个可选字符
  • [OI]
    -要么
    O
    要么
    I

前两个字母必须是字母,将
替换为
[:alpha:]
[A-Z]
,只需根据您的要求选择最好的。

亲爱的Eugenia,欢迎来到Stack Overflow。这是一个非常好的书面问题!我们不经常看到新用户在第一次尝试时添加所有需要的信息。尽管如此,不要害怕。期待在这个论坛上看到更多您的问题和答案。Wh在@kvantour,除了我看不出标题如何匹配这个问题外?哦,这是大写字母I,而不是管道。好吧,仍然…@JamesBrown将大写字母
I
|
O
与零
0
不匹配是fontsettings的错误,而不是OP;-)