מכיוון שנראה כי אין דרך קלה להפעיל זאת במקביל, אתה יכול במקום לפרק את העבודה לחלקים. לדוגמא, הפרד כל כרומוזום לקובץ gtf משלו, חילץ את הרצפים באמצעות אותו קובץ ואז חתול את כולם יחד.
הפקודות יהיו משהו כזה (באמצעות הגנום האנושי hg38 והערות ה- gff GENCODE הורד מ- כאן):
פצל את הקובץ לקובץ אחד לכל כרומוזום (או כל דבר אחר שיש לך כשדה הראשון של קובץ ה- gff / gtf שלך):
tmp = $ (mktemp -d); ## צור מדריך זמני temp -vtmp = "$ tmp" '($ 1! ~ / ^ # /) {הדפס > tmp "/" $ 1 ".gff"}' gencode.v27.annotation.gtf
חלץ את הרצפים המתוארים בכל קובץ, והפעל כל פקודה ברקע ( &
):
עבור f ב- $ tmp / *; do gffread -w "$ f.fa" -g hg38.fa "$ f" & done
שרשר אותם לקובץ אחד:
cat " $ tmp / * fa "> all.fa
אתה יכול לשלב את כל זה לפקודה אחת, באמצעות המתן
כדי לוודא שאתה לא שרשור עד שהכל מפקודות המשנה הסתיימו:
tmp = $ (mktemp -d); awk -vtmp = "$ tmp" '($ 1! ~ / ^ # /) {הדפס > tmp "/" $ 1 ".gff"}' gencode.v27.annotation.gtf && עבור f ב "$ tmp" / *; do gffread-0.9.12.Linux_x86_64 / gffread -w $ f.fa -g hg38.fa "$ f" & done wait cat "$ tmp" / * fa > all.fa
לחלופין, פשוט שמור אותו כסקריפט בשם pgffread.sh (או מה שלא יהיה):
#! / Bin / shgtf = "$ 1" genome = "$ 2" tmp = $ (mktemp -d); awk -vtmp = "$ tmp" '($ 1! ~ / ^ # /) {הדפס > tmp "/" $ 1 ".gff"}' "$ gtf" && עבור f ב "$ tmp" / *; לעשות gffread -w "$ f" .fa -g "$ genome" "$ f" & donewaitcat "$ tmp" / * fa rm -rf "$ tmp"
ואז לרוץ זה נותן את הגנום ואת קבצי ההערות כפרמטרים:
pgffread.sh gencode.v27.annotation.gtf hg38.fa > all.fa
במערכת שהפעלתי אותה, שיש לה 48 ליבות, הפרש הזמן היה משמעותי (למרות שבכל מקרה זה כל כך מהיר, אני באמת לא יודע אם זה שווה להתאמץ אלא אם כן אתה עושה את זה לעיתים קרובות מאוד):
$ time gffread -w out.fa -g hg38 .fa gencode.v27.annotation.gtfreal 1m52.072suser 1m3.160ssys 0m47.257s $ זמן ./pgffread.sh gencode.v27.annotation.gtf hg38.fa > all.fareal 0m17.533 משתמש 1m5.228ssys 0m43.039s קוד>