将 FASTQ 标头附加回序列读取

将 FASTQ 标头附加回序列读取

我有一个 fastq 文件,其标题行附加了条形码序列,最后一个 : 后以 @ 开头。此模式每四行重复一次。下面是一个例子:

@FCID:1:1101:15473:1334 1:N:0:TATTTGCGACAA
AGTGGACTAGGGGATGCCAGCCGCCGCGGTAATACGTAGGTGGCAAGCGTTATCCGGATTTATTGGGCGTAAAGGGAACGCAGGCGGTCTTTTAAGTCTGATGTGAAAGCCTTCGGCTTAACCGGAGTAGTGCTTTGGAAACTGTGCAGCTCGAGTGCAGGAGAGGTAAGCGGAATTCCTAGTGTAGCGGTGAAATGCGTAGATATTAGGAGGAACACCAGTGGCGAAGGCGGCTTACTGGACTGTAACT
+
AAAABFFFFFFCGGGGGGGGGGGGGGGGGGGGGHHHHHHGHHGGGHGHGGGGHHHGGGGGHHHHHHHHGGGGHHHGHHGGGGGGGGGGGGHHHHHHHGHGHHHHHHHHFHHHHHHGGGGHHHHGGGGGHHHHHHHHHHGHHHHHHFHHFHGGGGDFHHHHH.EGGGBFFGGGGGGEFFFGGGGFFGGGF-DFEFFFFFFA.-./FFFFBFFFBFFFFFFA?;/B?F@DCFEAAF-@FFBBBBFFEFFFB;
@FCID:1:1101:15528:1336 1:N:0:GCGGGAAAAAAA
GAATTGGACGAGTGCCAGCAGCCGCGGTAATACGTAGGTGGCAAGCGTTATCCGGAATTATTGGGCGTAAAGAGGGAGCAGGCGGCAGCAAAGGTCTGTGGTGAAAGACTGAAGCTTAACTTCAGTAAGCCATAGAAACCGGGCAGCTAGAGTGCAGGAGAGGATCGTGGAATTCCATGTGTAGCGGTGAAATGCGTAGATATATGGAGGAACACCAGTGGCGAAGGCGACGATCTGGCCTGCAACTGAC
+
DDDDDFFFFCDCGGGGGGGGGGHGGGGGGGHHHHHHHGHHGHHHGHGGGGHHHGGGGGHHHHHHHHGGGGHHGHHGGGGHHHGGGGGGGHHHHGGHHHHHHHGHHHHHHHHHHHHGHHHGHGHHHHHHHHHHHHHHHHHHGGGGGGGHHHHHGHGHHHGGHGDHHGDFFGGGGGGGGGGFGGGFGGG9?EGFGGFFAD;EFFFFFFFFFFFFFFFDEEFFFFFFF-DE->CFFEEAFFFFFFFBFFFFF0

我的目标是将条形码附加到每第二行的序列读取中,其他所有内容都保持不变。下面是我的预期输出(条形码是每个序列行的最后 12 个字母)。

@FCID:1:1101:15473:1334 1:N:0:TATTTGCGACAA
AGTGGACTAGGGGATGCCAGCCGCCGCGGTAATACGTAGGTGGCAAGCGTTATCCGGATTTATTGGGCGTAAAGGGAACGCAGGCGGTCTTTTAAGTCTGATGTGAAAGCCTTCGGCTTAACCGGAGTAGTGCTTTGGAAACTGTGCAGCTCGAGTGCAGGAGAGGTAAGCGGAATTCCTAGTGTAGCGGTGAAATGCGTAGATATTAGGAGGAACACCAGTGGCGAAGGCGGCTTACTGGACTGTAACTTATTTGCGACAA
+
AAAABFFFFFFCGGGGGGGGGGGGGGGGGGGGGHHHHHHGHHGGGHGHGGGGHHHGGGGGHHHHHHHHGGGGHHHGHHGGGGGGGGGGGGHHHHHHHGHGHHHHHHHHFHHHHHHGGGGHHHHGGGGGHHHHHHHHHHGHHHHHHFHHFHGGGGDFHHHHH.EGGGBFFGGGGGGEFFFGGGGFFGGGF-DFEFFFFFFA.-./FFFFBFFFBFFFFFFA?;/B?F@DCFEAAF-@FFBBBBFFEFFFB;
@FCID:1:1101:15528:1336 1:N:0:GCGGGAAAAAAA
GAATTGGACGAGTGCCAGCAGCCGCGGTAATACGTAGGTGGCAAGCGTTATCCGGAATTATTGGGCGTAAAGAGGGAGCAGGCGGCAGCAAAGGTCTGTGGTGAAAGACTGAAGCTTAACTTCAGTAAGCCATAGAAACCGGGCAGCTAGAGTGCAGGAGAGGATCGTGGAATTCCATGTGTAGCGGTGAAATGCGTAGATATATGGAGGAACACCAGTGGCGAAGGCGACGATCTGGCCTGCAACTGACGCGGGAAAAAAA
+
DDDDDFFFFCDCGGGGGGGGGGHGGGGGGGHHHHHHHGHHGHHHGHGGGGHHHGGGGGHHHHHHHHGGGGHHGHHGGGGHHHGGGGGGGHHHHGGHHHHHHHGHHHHHHHHHHHHGHHHGHGHHHHHHHHHHHHHHHHHHGGGGGGGHHHHHGHGHHHGGHGDHHGDFFGGGGGGGGGGFGGGFGGG9?EGFGGFFAD;EFFFFFFFFFFFFFFFDEEFFFFFFF-DE->CFFEEAFFFFFFFBFFFFF0

我尝试使用 awk,但这不起作用。

awk '(FNR) % 4 == 1 { -F; seq=$8; next }
     (FNR) % 4 == 2 { line[FNR]=$0; print $0 seq}' R1test.fq > R1test_new.fq

有人可以帮忙吗?

答案1

我将做出以下假设:

  1. 您的所有记录都恰好有 4 行。这是不是fastq 格式需要,但短读数据经常出现这种情况。

  2. :您的条形码始终是从第一行开始的每 4 行最后一个字母之后的最后一串字母。

如果这些假设成立,您可以执行以下操作:

awk -F':' 'NR % 4 == 1 {seq=$NF}
     NR % 4 == 2 { $0=$0 seq}1' R1test.fq > R1test_new.fq

这与您的代码的想法类似,我只是删除了一些不必要的步骤并修复了一些问题。最后1的 是 awk 的“打印这一行”的简写。

您的代码不起作用,因为您无法在代码-F中设置 use 来设置字段分隔符awk,这-F是二进制文件的一个选项awk,而不是 awk 语言的功能。要更改 awk 脚本中的字段分隔符,您可以使用FS变量(例如BEGIN{FS=":"})。接下来,即使您设法更改了字段分隔符,这也无关紧要,因为在执行任何代码之前该行已被分割。您只能在BEGIN{}块中设置分隔符。如果将其设置在其他地方,则还需要告诉 awk 重新解析该行。无论如何,您想要:作为字段分隔符,而不是;.

警告:

这可能会破坏您想要执行的任何下游处理,因为序列的长度与 phred 质量分数的长度不匹配。您真的确定这是个好主意吗?

答案2

处理 fasta 文件要求的一种方法是使用 GNU sed 流编辑器。

这里 sed 正在查看以 @ 开头的行并将下一行附加到该行。然后 @ 行的最后 12 个字符将附加到附加行。

sed -Ee '
  /^@/N
  s/(.{12})\n.*/&\1/
' R1test.fq > R1test_new.fq

相关内容