-->

转换FASTQ与SED / AWK FASTA(Converting FASTQ to FASTA

2019-07-21 15:51发布

我有一个数据总是在下面的格式(称为FASTQ)四个模块:

@SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
+SRR018006.2016 GA2:6:1:20:650 length=36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+!
@SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SRR018006.19405469 GA2:6:100:1793:611 length=36
7);;).;);;/;*.2>/@@7;@77<..;)58)5/>/

有一个简单的SED / AWK / bash的方式将它们转换成这种格式(称为FASTA):

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

原则上,我们要提取每个块的-4的前两行和替换@>

Answer 1:

这是一个老问题,也有过许多提供不同的解决方案。 由于接受的答案使用SED,但有一个明显的问题(这是它会与>当@符号出现质量行的第一个字母代替@),我觉得有必要提供一个简单的sed式的解决方案,实际工作:

sed -n '1~4s/^@/>/p;2~4p' 

做的唯一的假设是,每一次读中占有FASTQ文件正好是4行,但似乎非常安全的,在我的经验。

在fastx工具包中的fastq_to_fasta脚本也适用。 (值得一提的是,你需要指定-Q33选项,以适应现在常见的PHRED + 33 QUAL编码。这很有趣,因为它反正扔掉质量数据!)



Answer 2:

SED是不是死了。 如果我们打高尔夫球:

sed '/^@/!d;s//>/;N'

或者,模仿http://www.ringtail.tsl.ac.uk/david-studholme/scripts/fastq2fasta.pl张贴由皮埃尔,只从第一行打印出第一个字(标识)和做(一些)错误处理:

#!/usr/bin/sed -f
# Read a total of four lines
$b error
N;$b error
N;$b error
N
# Parse the lines
/^@\(\([^ ]*\).*\)\(\n[ACGTN]*\)\n+\1\n.*$/{
  # Output id and sequence for FASTA format.
  s//>\2\3/
  b
}
:error
i\
Error parsing input:
q

似乎有足够的转换这些格式现有的工具; 你应该使用这些,而不是在这里发布任何内容(包括以上)。



Answer 3:

如公鸡详述,等(2009)NAR,许多这些解决方案是因为“在‘@’标志符(ASCII 64)可以在质量字符串的任何地方出现不正确。这意味着,任何解析器不能治疗开头的行“@”为指示下一个记录开始时,无需额外检查质量字符串的长度迄今为止相匹配的序列的长度“。

见http://ukpmc.ac.uk/articlerender.cgi?accid=PMC2847217了解详情。



Answer 4:

只是awk中,无需其他工具

# awk '/^@SR/{gsub(/^@/,">",$1);print;getline;print}' file
>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC


Answer 5:

fastq2fasta.pl在http://www.ringtail.tsl.ac.uk/david-studholme/scripts/



Answer 6:

我会写

awk '
    NR%4 == 1 {print ">" substr($0, 2)}
    NR%4 == 2 {print}
' fastq > fasta


Answer 7:

这是我得最快的,我把它贴在我的.bashrc文件:

alias fq2fa="awk '{print \">\" substr(\$0,2);getline;print;getline;getline}'"

它不会失败的一个以@ ...开始但并未能对包裹FASTQ不常见的,但不是不可能的音质线,如果这甚至法律(尽管它存在)。



Answer 8:

这里的解决方案,我只是从SO发现了这个问题的“跳过所有其他行”的一部分:

while read line
do
    # print two lines
    echo "$line"
    read line_to_print
    echo "$line_to_print"

    # and skip two lines
    read line_to_skip
    read line_to_skip
done

如果所有需要做的是改变一个@> ,那么我想

while read line
do
    echo "$line" | sed 's/@/>/'
    read line
    echo "$line"

    read line_to_skip
    read line_to_skip
done

将做的工作。



Answer 9:

就像是:

awk 'BEGIN{a=0}{if(a==1){print;a=0}}/^@/{print;a=1}' myFastqFile | sed 's/^@/>/'

应该管用。



Answer 10:

我认为,与GNU grep的,这可能与该这样做:

grep -A 1 "^@" t.txt | grep -v "^--" | sed -e "s/^@/\>/"


Answer 11:

awk 'BEGIN{P=1}{if(P==1||P==2){gsub(/^[@]/,">");print}; if(P==4)P=0; P++}' data

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

下面

awk '{gsub(/^[@]/,">"); print}' data

其中,数据是数据文件。 我已经收到:

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
+SRR018006.2016 GA2:6:1:20:650 length=36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+!
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SRR018006.19405469 GA2:6:100:1793:611 length=36
7);;).;);;/;*.2>/@@7;@77<..;)58)5/>/


Answer 12:

我知道我的未来,但对于Google员工的利益:

您可能需要使用fastq_to_fasta从fastx工具包 。 这将保持@符号,虽然。 除非你告诉它不这样做也会删除与NS线。



Answer 13:

您可能会感兴趣的bioawk,它是调谐处理的fasta文件AWK改编版

bioawk -c fastx '{ print ">"$name ORS $seq }' file.fastq

注: BioAwk是根据布莱恩·柯林汉的AWK这是在记录“的AWK编程语言”,由铝阿霍,布赖恩Kernighan的,和彼得·温伯格(Addison-Wesley出版社,1988年,ISBN 0-201-07981-X) 。 我不知道,如果这个版本兼容POSIX 。



文章来源: Converting FASTQ to FASTA with SED/AWK