awk - 根据列的前两个字母过滤

标签 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

你能帮我吗?

最佳答案

您可以使用

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

awk online demo .
'$2 !~ /^.?[OI]/'意思是:打印字段 2 不匹配的所有行:
  • ^ - 行首
  • .? - 任意 1 个可选字符
  • [OI] - 要么 OI .

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

    关于awk - 根据列的前两个字母过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415323/

    相关文章:

    awk - 识别/etc/passwd 文件中具有重复 user-id 的用户名

    linux - 如何使用 awk(或 cut)从管道分隔文件中打印每行的最后一个字段?

    php 比较日变化的日期

    c++ - 比较 uintptr_t 和指针类型的最佳方法是什么?

    asp.net - 在页面中显示 .Net 页面

    python - 使用 filter、reduce、add、map 从多个字典中获取和评估数据

    bash - 使用 awk 重复 CSV 中未知数量的第一列

    awk 记住上一行的问题

    float 和 double 变量的比较

    javascript - Array.filter 返回空数组