我有一个数据总是在下面的格式(称为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