Преобразовать список последовательности в fasta для нескольких файлов - PullRequest
1 голос
/ 08 марта 2019

У меня есть тысячи файлов, которые представляют собой список имен последовательностей, за которыми следуют их последовательности, по одному человеку на строку, что-то вроде этого:

L.abdalai.LJAMM.14363.SanMartindeLosAndes        CCCTAAGAATAATTTGTT
L.carlosgarini.LJAMM.14070.LagunadelMaule        CCCTAAGAAT-ATTTGTT
L.cf.silvai.DD.038.Sarco                         CCCTAAGAAT-ATTTGTT

И я хочу изменить их на формат фаста, поэтому выглядело примерно так:

>L.abdalai.LJAMM.14363.SanMartindeLosAndes       
CCCTAAGAATAATTTGTTCAGAAAAGATATTTAATTATAT
>L.carlosgarini.LJAMM.14070.LagunadelMaule
CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT
>L.cf.silvai.DD.038.Sarco
CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT

Я работаю на Mac.
Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 марта 2019

Использование Perl

perl -pe 's/^/</;s/(\S+)\s+(\S+)/$1\n$2CAGAAAAGATATTTAATTATAT/g ' file

с вашими входами

$ cat damien.txt
L.abdalai.LJAMM.14363.SanMartindeLosAndes        CCCTAAGAATAATTTGTT
L.carlosgarini.LJAMM.14070.LagunadelMaule        CCCTAAGAAT-ATTTGTT
L.cf.silvai.DD.038.Sarco                         CCCTAAGAAT-ATTTGTT

$ perl -pe 's/^/</;s/(\S+)\s+(\S+)/$1\n$2CAGAAAAGATATTTAATTATAT/g ' damien.txt
<L.abdalai.LJAMM.14363.SanMartindeLosAndes
CCCTAAGAATAATTTGTTCAGAAAAGATATTTAATTATAT
<L.carlosgarini.LJAMM.14070.LagunadelMaule
CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT
<L.cf.silvai.DD.038.Sarco
CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT

$
2 голосов
/ 08 марта 2019

Я полагаю, вы упростили ввод данных, что отличается от ожидаемого результата.
Если это не так, и мои решения не работают, пожалуйста, прокомментируйте мой ответ, чтобы сообщить мне.

Итак, с помощью awk вы можете сделать это так:

awk -v OFS="\n" '$1=">" $1' file
>L.abdalai.LJAMM.14363.SanMartindeLosAndes
CCCTAAGAATAATTTGTT
>L.carlosgarini.LJAMM.14070.LagunadelMaule
CCCTAAGAAT-ATTTGTT
>L.cf.silvai.DD.038.Sarco
CCCTAAGAAT-ATTTGTT

Если вы хотите изменить на месте, пожалуйста, установите GNU gawk и используйте gawk -i inplace ....
И если вы хотите, чтобы окончание строки было Каретки , добавьте / измените на -v ORS="\r" -v OFS="\r"

Однако вы также можете, и, может быть, лучше сделать это с sed:

sed -e 's/\([^[:space:]]*\)[[:space:]]*\([^[:space:]]*\)/>\1\n\2/' file

Добавьте -i'' следующим образом: sed -i'' -e ..., чтобы изменить файл на месте.

1 голос
/ 08 марта 2019

Не могли бы вы попробовать следующее (создано и протестировано на основе ваших образцов, так как у меня нет Mac, чтобы не тестировать его).

awk '/^L\./{print ">"$1 ORS $2 "CAGAAAAGATATTTAATTATAT"}'  Input_file

Вывод будет следующим. При необходимости вы можете передать его в файл output_file, добавив > output_file к вышеуказанной команде.

>L.abdalai.LJAMM.14363.SanMartindeLosAndes
CCCTAAGAATAATTTGTTCAGAAAAGATATTTAATTATAT
>L.carlosgarini.LJAMM.14070.LagunadelMaule
CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT
>L.cf.silvai.DD.038.Sarco
CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...