Bash Условный оператор IF после строки в заголовке FASTQ - PullRequest
0 голосов
/ 25 октября 2019

Я хотел бы извлечь только те операции чтения, которые имеют покрытие более 2 и длину более 504. Все это хранится в каждом заголовке файла FASTQ. Однако я не могу тренировать однострочник, который бы фильтровал по этим качествам. Посмотрите пример того, как выглядят две строки ввода FASTQ.

Спасибо за вашу помощь.

>NODE_303303_length_504_cov_30.000000
CAGGATGTTGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT
>NODE_303603_length_56_cov_1.000000
CAGGATGAGATCGGAAGAGCACACGTCTGAACTCCAGTCACATTACTCGATCTCGT

1 Ответ

2 голосов
/ 25 октября 2019

Рекомендуется предоставить входной файл и выходной файл для более четкого выражения того, что вы пытаетесь выполнить. Кроме того, включите любой код, который вы пытались.

Позвольте мне попробовать:

Предположим, что каждая строка ввода выглядит следующим образом:

>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
...