تحويل FASTQ إلى FASTA باستخدام SED/AWK
سؤال
لدي بيانات في أن تأتي دائمًا في كتلة من أربعة في التنسيق التالي (تسمى 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 واستبدال @
مع >
.
المحلول
وهذا هو السؤال القديم، وكانت هناك العديد من الحلول المختلفة المقدمة. منذ الاستخدامات الإجابة المقبولة سد ولكن لديه مشكلة صارخ (وهو أنه سيحل محل @ مع> عندما يظهر @ علامة مثل الحرف الأول من خط الجودة)، أجد نفسي مضطرا لتقديم بسيط حل سد المستندة أن يعمل فعلا :
sed -n '1~4s/^@/>/p;2~4p'
والافتراض الوحيد الذي قدمته هو أن كل قراءة تحتل بالضبط 4 خطوط في ملف FASTQ، ولكن يبدو أن آمنة جدا، في تجربتي.
والسيناريو fastq_to_fasta في أدوات fastx يعمل أيضا. (ومن الجدير بالذكر أن تحتاج إلى تحديد الخيار -Q33 لاستيعاب PHRED + 33 ترميزات التأهيلية الآن المشتركة. ما هو مضحك، نظرا لأنه رمي نوعية البيانات على أي حال!)
نصائح أخرى
والحوار الاقتصادي الاستراتيجي لم يمت. إذا نحن الغولف:
sed '/^@/!d;s//>/;N'
وأو محاكاة HTTP: //www.ringtail.tsl .ac.uk / ديفيد studholme / مخطوطات / 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
ويبدو أن هناك الكثير من الأدوات الموجودة لتحويل هذه الأشكال. ربما يجب عليك استخدام هذه بدلا من أي شيء نشر هنا (بما في ذلك أعلاه).
وكما هو مفصل في الديك، وآخرون (2009) NAR، وكثير من هذه الحلول غير صحيحة لأن "" @ "حرف علامة (ASCII 64) قد تحدث في أي مكان في سلسلة الجودة. وهذا يعني أن أي محلل يجب على ألا نعامل خط البداية مع "@" كما يشير إلى بداية السجل التالي، دون بالإضافة إلى التحقق من طول السلسلة جودة مباريات حتى الآن على طول تسلسل ".
http://ukpmc.ac.uk/articlerender.cgi؟accid=PMC2847217 للحصول على مزيد من التفاصيل.
وفقط 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
وانظر على fastq2fasta.pl في HTTP: //www.ringtail.tsl.ac.uk/david-studholme/scripts/
وكنت أكتب
awk '
NR%4 == 1 {print ">" substr($0, 2)}
NR%4 == 2 {print}
' fastq > fasta
وهذا هو أسرع عندي، وأنا عالقة في ملف .bashrc بلدي:
alias fq2fa="awk '{print \">\" substr(\$0,2);getline;print;getline;getline}'"
وأنها لا تفشل على قلتها ولكن ليس نوعية خطوط المستحيل أن تبدأ مع @ ... ولكن لا تفشل في FASTQ ملفوفة، اذا كان هذا حتى القانوني (كان موجودا على الرغم من).
وهنا حل جزء "تخطي كل خط آخر" المشكلة أنني علمت للتو من 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
وسوف قيام بهذه المهمة.
وشيء من هذا القبيل:
awk 'BEGIN{a=0}{if(a==1){print;a=0}}/^@/{print;a=1}' myFastqFile | sed 's/^@/>/'
ويجب أن تعمل.
وأعتقد، مع حكومة الوحدة الوطنية البقرى ويمكن أن يتم هذا مع هذا:
grep -A 1 "^@" t.txt | grep -v "^--" | sed -e "s/^@/\>/"
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/>/
وأنا أعرف الطريقة في المستقبل، ولكن لصالح من موظفي Google:
وأنت قد ترغب في استخدام fastq_to_fasta من fastx أدوات . وسوف تبقى علامة @، على الرغم من. انها ستزيل أيضا خطوط مع نانوثانية إلا إذا كنت أقول أن لا.
قد تكون مهتمًا بـ bioawk، فهو نسخة معدلة من awk تم ضبطها لمعالجة ملفات fasta
bioawk -c fastx '{ print ">"$name ORS $seq }' file.fastq
ملحوظة: BioAwk مبني على بريان كيرنيغان محرج الذي تم توثيقه في "لغة البرمجة AWK" ، من تأليف Aho و Brian Kernighan و Peter Weinberger (Addison-Wesley ، 1988 ، ISBN 0-201-07981-X).لست متأكدًا مما إذا كان هذا الإصدار متوافقًا مع بوسيكس.