Извлечение быстрых идентификаторов после совпадения строк - PullRequest
1 голос
/ 28 марта 2019

У меня есть список последовательностей фаста следующим образом:

>Product_1_001:299:H377WBGXB:1:11101 
TGATCATCTCACCTACTAATAGGACGATGACCCAGTGACGATGA
>Product_2_001:299:H377WBGXB:2:11101 
CATCGATGATCATTGATAAGGGGCCCATACCCATCAAAACCGTT

Исходная последовательность выполнения намного длиннее, чем подмножество, размещенное здесь. Я хотел извлечь 10 символов после шаблона "TCAT" в отдельный файл и сделал это

grep -oP "(?<=TCAT).{10}"

Я получаю нужный результат как:

CTCACCTACT
TGATAAGGGG

Я хотел бы, чтобы их соответствующие идентификаторы фаст-фудов были в виде одного столбца, а извлеченный шаблон - во втором столбце, например:

>Product_1_001:299:H377WBGXB:1:11101     CTCACCTACT
>Product_2_001:299:H377WBGXB:2:11101     TGATAAGGGG

Ответы [ 2 ]

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

Попробуйте этот однострочный

perl -lne ' /^[^<].+?(?<=TCAT)(.{10})/ and print $p,"\t",$1; $p=$_ ' file

с заданными вами значениями

$ cat fasta.txt
>Product_1_001:299:H377WBGXB:1:11101
TGATCATCTCACCTACTAATAGGACGATGACCCAGTGACGATGA
>Product_2_001:299:H377WBGXB:2:11101
CATCGATGATCATTGATAAGGGGCCCATACCCATCAAAACCGTT

$ perl -lne ' /^[^<].+?(?<=TCAT)(.{10})/ and print $p,"\t",$1; $p=$_ ' fasta.txt
>Product_1_001:299:H377WBGXB:1:11101    CTCACCTACT
>Product_2_001:299:H377WBGXB:2:11101    TGATAAGGGG

$
0 голосов
/ 28 марта 2019

Другой способ будет использовать awk команду, подобную этой:

cat <your_file>| awk -F"_" '/Product/{printf "%s", $0; next} 1'|awk -F"TCAT" '{ print substr($1,1,35) "\t" substr($2,1,10)}'

вывод:

Product_1_001:299:H377WBGXB:1:11101     CTCACCTACT
Product_2_001:299:H377WBGXB:2:11101     TGATAAGGGG

надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...