【问题标题】:How to filter the OTU by counts with AWK?如何使用 AWK 按计数过滤 OTU?
【发布时间】:2019-06-11 17:36:25
【问题描述】:

我正在尝试从 fasta 文件中过滤所有单例。 这是我的输入文件:

 >OTU1;size=3;
 ATTCCCCGGGGGGG 
 >OTU2;size=1;
 ATCCGGGACTGATC
 >OTU3;size=5;
 GAACTATCGGGTAA
 >OTU4;size=1;
 AATTGGCCATCT

预期的输出是:

>OTU1;size=3;
ATTCCCCGGGGGGG 
>OTU3;size=5;
GAACTATCGGGTAA

我试过了

awk -F'>' '{if($1>=2) {print $0}' input.fasta > ouput.fasta 

但这将删除每个 OTU 的所有标头。

谁能帮帮我?

【问题讨论】:

  • 您要过滤什么。你提到计数,但计数是什么?

标签: awk


【解决方案1】:

请您尝试关注一下。

awk -F'[=;]' '/^>/{flag=""} $3>=3{flag=1} flag'   Input_file

【讨论】:

  • 这里的“flag”是什么意思?
  • @Helen,它是一个变量,只要一行的第三个字段大于或等于 3,我就将其设为 TRUE。
  • 我们之前已经讨论过几次 - 命名标志变量 flag 就像命名整数变量 integer。我想在技术上是正确的,但对于可读性而言,它几乎不如为它在逻辑上表示的变量命名,例如 countsumtotalindex 或其他东西,如果/当你有 2 个整数时会让人头疼并命名一个integer。在标志变量的情况下,它通常表示输入中的某些东西是found,在小脚本中通常缩写为f(注意:f 代表 found,而不是 flag)
  • 不应该是$3>=2,还是更好的$3>1
【解决方案2】:
$ awk '/>/{f=/=1;/}!f' file
 >OTU1;size=3;
 ATTCCCCGGGGGGG
 >OTU3;size=5;
 GAACTATCGGGTAA

【讨论】:

  • 智能、简洁、优雅。
【解决方案3】:
awk -v FS='[;=]' 'prev_sz>=2 && !/size/{print prev RS $0}   /size/{prev=$0;prev_sz=$(NF-1)}'

>OTU1;size=3;
 ATTCCCCGGGGGGG
 >OTU3;size=5;
 GAACTATCGGGTAA

将每行的大小存储在prev_sz 变量中,将整行存储在prev 变量中。现在检查它是否为>= 2,然后打印上一行和当前行。 RS 用于打印新行。

【讨论】:

    【解决方案4】:

    虽然上述所有方法都有效,但它们仅限于输入始终必须看起来相同的事实。即您的 fasta 文件中的序列名称需要具有以下形式:

    >NAME;size=value;
    

    一些解决方案可以处理更多扩展的序列名称,但没有一个解决方案可以处理更通用的情况,即

    >NAME;label1=value1;label2=value2;STRING;label3=value3;
    

    标签xxx匹配值vvv的打印序列

    awk '/>{f = /;xxx=vvv;/}f' file.fasta
    

    标签xxx的数值p大于q的打印序列

    awk -v label="xxx" -v limit=q \
        'BEGIN{ere=";" label "="}
         />/{ f=0; match($0,ere);value=0+substr($0,RSTART+length(ere)); f=(value>limit)}
         f' <file>
    

    在上面ere是我们尝试匹配的正则表达式。我们使用它来查找附加到标签xxx 的值的位置。此子字符串的值后面将有非数字字符,但通过向其添加 0,它会转换为数字,丢失所有非数字值(即 3;label4=value4; 转换为 3)。我们检查该值是否大于我们的限制,并根据该结果打印序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 2021-05-08
      • 1970-01-01
      • 2020-01-13
      • 2013-09-28
      相关资源
      最近更新 更多