Pobieranie sekwencji z bazy GenBank i praca w plikami FASTA przy pomocy linii komend
Dlaczego linia komend?
Pobieranie sekwencji przy użyciu narzędzi uruchamianych z linii komend jest w niektórych sytuacjach łatwiejsze, zwłaszcza gdy wiemy, które sekwencje (albo ich fragmenty) i/lub chcemy pobrać ich wiele.
Dostęp do GenBank-u przy pomocy narzędzi Entrez Direct
,,Entrez Direct'' to grupa programów opublikowanych przez NCBI umożliwiających dostęp do baz danych tej organizacji. Podręcznik do pakietu (wraz z instrukcją instalacji) pt. Entrez Direct: E-utilities on the UNIX Command Line można znaleźć pod adresem https://www.ncbi.nlm.nih.gov/books/NBK179288/. Nie będziemy oczywiście poznawać dogłębnie wszystkich narzędzi ale pokażę kilka przydatnych komend i sposobów ich wykorzystania.
Wyszukiwanie sekwencji - esearch
esearch
Do wyszukiwania informacji w bazach danych służy narzędzie esearch
. Przy podstawowym użyciu, przyjmuje dwa argumenty:
-db
- określający bazę do której zostanie wysłane zapytanie-query
- zapytanie
Wywołanie programu będzie wyglądało tak:
Jeśli zapytanie składa się z wielu słów, należy je zamknąć w cudzysłowach.
Lista identyfikatorów wybranych baz danych znajduje się pod adresem https://www.ncbi.nlm.nih.gov/books/NBK25497/table/chapter2.T._entrez_unique_identifiers_ui/?report=objectonly. Jak widać jest ich wiele. Nas będzie interesowała teraz baza ,,Nucleotide'', która ma identyfikator nuccore
lub nucleotide
. To właśnie z niej wcześniej korzystaliśmy przez stronę internetową.
Warto też przejrzeć wbudowaną pomoc programu, gdzie znajdziemy nie tylko identyfikatory baz ale też opisy innych opcji programu. Uruchamiamy ją wpisując:
Uruchom polecenie:
Pokaże się wynik:
Nie wydaje się zbyt przydatny, ale można zrozumieć, że znaleziono 17 wyników. Nie widać żadnych sekwencji. Zaraz pokażę jak uzyskać bardziej użyteczny rezultat.
Pobieranie sekwencji - efetch
efetch
Drugim narzędziem pakietu Entrez Direct z którego będziemy korzystać jest efetch
służący, jak wskazuje nazwa, do pobierania danych.
Znając numer dostępowy sekwencji można ją pobrać w ten sposób:
Na przykład:
Wynik jest zgodny z oczekiwaniami:
Wynik oczywiście możemy zapisać w pliku używając znaku >
:
Przejrzyj pomoc programu, którą wywołasz komendą:
Poeksperymentuj z różnymi formatami wyniku.
Teraz sprobujemy użyć polecenia efetch
do pobrania serii sekwencji, tych samych, które należało pobrać przy pomocy przeglądarki w poprzedniej części. Zapisz ich numery, po jeden w każdej linii w pliku atp6_numery.txt
Teraz napiszemy skrypt o nazwie pobierz_sekwencje.sh
, który w pętli będzie kolejno odczytywał numery sekwencji i przekazywał je do polecenia efetch
, które będzie je pobierało i zapisywało w pliku. Nazwę pliku z danymi i nazwę pliku wynikowego będziemy podawać jako argumenty przy wywoływaniu skryptu.
Następnie uruchamiamy skrypt:
Sprawdź zawartość pliku wynikowego.
efetch
- pobieranie fragmentów sekwencji
efetch
- pobieranie fragmentów sekwencjiDzięki programowi efetch
można też uzyskać fragment sekwencji podając miejsce pierwszego i ostatniego nukleotydu żądanego fragmentu. Służą do tego opcje: -seq_start
i -seq_stop
.
Na przykład wytnijmy sekwencję genu nad2
z genomu mitochondrialnego Arabidopsis thaliana o identyfikatorze NC_001284
. Miejsca początku i końca genu odczytamy z wyniku wyszukiwania:
Teraz przekażmy je do polecenia:
Otrzymamy żądany fragment genomu.
Teraz powróćmy do problemu pobieraniu sekwencji we fragmentach z którym zetknęliśmy się w lekcji poświęconej pobieraniu sekwencji z GenBank-u przy pomocy strony internetowej. Sekwencja genu nad2
w genomie Arabidopsis thaliana (nr. NC_001284) występowała tam w dwu, oddzielonych od siebie fragmentach, przy czym część kodująca (CDS
) miała aż pięć części.
W dodatku były to sekwencje komplementarne (i odwrócone). Teraz pokażę jak używając prostego skryptu pobrać żądane fragmenty i połączyć je w jedną sekwencję.
Można oczywiście po kolei wykonywać polecenia pobierania fragmentów z sekwencji, za pomocą narzędzia efetch
jak pokazałem powyżej i dołączać wyniki do pliku FASTA
.
Komendy możesz wpisywać i uruchamiać w terminalu, albo umieścić je w skrypcie (np. pobierz_odcinki.sh
) i go uruchomić.
Otrzymany plik będzie miał taką zawartość:
Zamiast uruchamiać wielokrotnie tą samą komendę, można utworzyć plik tekstowy z miejscami początku i końca fragmentów sekwencji a następnie stworzyć skrypt, który w pętli po kolei je pobierze i umieści w pliku.
Najpierw utworzymy plik, w którym zapiszemy kolejne miejsca początku i końca fragmentów sekwencji oddzielone znakiem tabulatora (odcinki.tsv
).
Teraz skrypt ./pobierz_odcinki_petla.sh
:
Sprawdź plik wynikowy.
Łączymy efetch
, sed
, tr
i rev
efetch
, sed
, tr
i rev
Jak widać poszczególne fragmenty występują oddzielnie. Teraz powinniśmy połączyć je w jedną sekwencję. Można to zrobić w edytorze tekstu ale od czego mamy linię komend i narzędzia sed
, tr
i rev
?
Zadanie wykonamy w pięciu etapach:
Usuniemy linie z opisami sekwencji
Połączymy fragmenty w jedną sekwencję
Przekształcimy ją w sekwencję komplementarną
Odwrócimy sekwencje
Dodamy opis w pierwszej linii pliku
Zastanów się, najpierw ogólnie, jak te zadania zrealizować używając programów sed
, tr
i rev
?
Usunąć linie zaczynające się od znaku
>
:tr
lubsed
Usunąć wszystkie znaki końca linii: :
tr
Zmienić na sekwencję komplementarną:
tr
Odwrócić sekwencję:
rev
Wprowadzić do pierwszej linii pliku opis sekwencji
Teraz przekształćmy pomysł w konkretny kod. Utwórz skrypt polacz_odcinki.sh
:
Można też skonstruować ,,jednolinijkowca'':
Łączymy esearch
i efetch
esearch
i efetch
Dotychczas używaliśmy dwu narzędzi: służący do wyszukiwania esearch
i pobierający sekwencje efetch
oddzielnie. Ale możemy je razem połączyć za pomocą potoku tak aby wyszukiwanie połączyć z pobieraniem.
samtools faidx
- pobieranie sekwencji z pliku FASTA
samtools faidx
- pobieranie sekwencji z pliku FASTA
Pobierz plik http://ggoralski.pl/files/filogenetyka-data/Orobanchaceae-trnL-trnF-aligned.fasta
Sprawdź jego zawartość. Używaliśmy go już we wcześniejszych ćwiczeniach, zawiera wyrównane sewkencje trnL-trnF
.
Teraz sprawdź nazwy sekwencji używając komendy grep
:
Teraz będziemy chcieli pobrać z pliku sekwencję o nazwie KX524675_Lindenbergia_siniaca
. Można to zrobić oczywiście używając edytora tekstu lub programu do pracy z plikami FASTA
, ale czasem wygodniej to zrobić używając linii komend. Użyjemy do tego zadania programu faidx
, który jest częścią pakietu samtools
.
Pakiet samtools
zawiera wiele przydatnych programów do pracy z sekwencjami, przede wszystkim w innych formatach niż FASTA
, ale faidx
jest dość przydatne w codziennej pracy także w tym formacie.
Strona domowa projektu znajduje się pod adresem: http://www.htslib.org/. Tam też można przeczytać manuale programów.
Na Debianie można zainstalować pakiet komendą:
W innym przypadku, można pobrać pliki źródłowe ze strony i skompilować wg. znajdującej się tam instrukcji.
Uruchamianie narzędzi z pakietu samtools
wygląda następująco:
W przypadku faidx
będzie to wyglądało tak:
Opcjami, które użyjemy będzie kolejno nazwa pliku, z którego pobierzemy sekwencję i nazwa sekwencji. Uruchom:
Na ekranie wyświetli się żądana sekwencja, oczywiście można ją zapisać w pliku używając >
.
Zauważ, że podajemy pełną nazwę sekwencji (bez znaku >
), wpisanie jej fragmentu nie zadziała. Może to być pewnym mankamentem, na przykład gdy nazwy są długie albo gdy chcemy pobrać wiele sekwencji, których nazwy mają jakąś część wspólną (np. nazwę rodzaju.). W taki przypadku pomocne będzie polecenie grep
.
Uruchom:
W ten sposób otrzymujemy pełne nazwy wszystkich sekwencji należących do Orobanche. Teraz powinniśmy je przekazać do polecenia faidx
, ale najpierw musimy pozbyć się znaków >
:
Czas użyć ich przy wywołaniu faidx
. Polecenie:
nie zadziała. Trzeba wykorzystać xargs
:
Sprawdź zawartość pliku wynikowego.
Przy okazji pobierania sekwencji, można je oczywiście zmodyfikować. Na przykład możemy zmienić skrót O.
na pełną nazwę rodzajową Orobanche
i usunąć wszystkie znaki -
oznaczające brak nukleotydu. Użyjemy w tym celu poecenia sed
. Przy usuwaniu -
pamiętaj o dodaniu g
, który pozwala na wykonaniu polecenia na wszystkich znakach w linii.:
Last updated