我只想提取覆盖范围大于2且长度大于504的读取。这些都存储在FASTQ文件的每个标头中。但是,我无法锻炼能够根据这些品质进行过滤的单线。查看有关输入FASTQ的两行内容的示例。

谢谢您的帮助。

>NODE_303303_length_504_cov_30.000000
CAGGATGTTGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
>NODE_303603_length_56_cov_1.000000
CAGGATGAGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT

最佳答案

建议您提供一个输入文件和一个输出文件,以更清楚地表达您要完成的任务。另外,包括您尝试的任何代码。

让我试试看:

假设每个输入行如下所示:

>NODE_<node>_length_<length>_cov_<cov> <data>
<data1>
<data2>...
>NODE_<node>_length_<length>_cov_<cov> <data>


然后,我们可以使用下划线和空格作为字段分隔符来解析输入。这是一个可能适合您的awk程序:

awk -F'[_ ]' '
  $1 == ">NODE" { p = 0 }
  $1 == ">NODE" && $4 > 504 && $6 > 2 { p=1 }
  p == 1 { print }
' FASTQ_file


使用您的示例作为输入,没有输出。但是,这是另一个示例输入文件:

>NODE_303603_length_560_cov_2.000000 CAGGATGAGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
  more data - don't expect to see this output
>NODE_303603_length_505_cov_2.000000 CAGGATGAGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
  more data - don't expect to see this output
>NODE_303603_length_505_cov_2.000001 CAGGATGAGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
  more data
  this is the data we expect to see
>NODE_303303_length_504_cov_30.000000 CAGGATGTTGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
  more data - don't expect to see this output


这是我们将它们放在一起时的输出:

 awk -F'[_ ]' '
  $1 == ">NODE" { p = 0 }
  $1 == ">NODE" && $4 > 504 && $6 > 2 { p=1 }
  p == 1 { print }
' FASTQ_file

>NODE_303603_length_505_cov_2.000001 CAGGATGAGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
  more data
  this is the data we expect to see

10-08 11:51