【问题标题】:Compare specific parts of two columns in a text file in Linux在 Linux 中比较文本文件中两列的特定部分
【发布时间】:2019-11-25 07:36:54
【问题描述】:

我有一个文本文件,其中有几列由制表符分隔,如下所示:


    1    ATGCCCAGA  AS:i:10   XS:i:10  
    2    ATGCTTGA   AS:i:10   XS:i:5  
    3    ATGGGGGA   AS:i:10   XS:i:1  
    4    ATCCCCGA   AS:i:20   XS:i:20 

我现在想比较最后两列 AS:i:(n1) 和 XS:i:(n2) 以仅获取 n1 与 n2 不同的行。所以,我想要的输出是:

    2    ATGCTTGA   AS:i:10   XS:i:5  
    3    ATGGGGGA   AS:i:10   XS:i:1 

您能否建议我一些比较 n1 和 n2 并打印输出的方法?提前致谢。

【问题讨论】:

  • 您想要的输出似乎是这两个值不同而不相同的行...
  • 不管怎样,这都是一条微不足道的 awk 行。你试过什么?

标签: linux text multiple-columns


【解决方案1】:

正如 Shawn 所说,您可以在 awk... 或 perl ... 或 sed 中执行此操作。

一个 AWK 示例可能是

awk '{split($3,a,":");split($4,b,":");if(a[3]!=b[3]) print $0}' infile.txt

如果您熟悉 awk,这应该是不言自明的

【讨论】:

  • 如果我记得早点回来看看 OP 是否澄清了这个问题,我会建议 awk -v FS="[\t:]" '$5 != $8' infile.txt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2015-07-08
相关资源
最近更新 更多