我只想提取覆盖范围大于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