Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Извлечь соответствующий шаблон из входного файла и распечатать в выходной файл в Perl

Автор вопроса: RebiKirlОтветов: 1

У меня есть огромный входной файл от ncbi blastn в такой форме:

<ul id="msgFrm" class=" msg">
Job Title: otu0
Database: rRNA_typestrains/prokaryotic_16S_ribosomal_RNA 16S ribosomal RNA (Bacteria and Archaea)
Query #1: otu0 Query ID: lcl|Query_16950 Length: 460

Sequences producing significant alignments:
                                                                  Max    Total Query   E   Per.
Description                                                       Score  Score cover Value Ident  Accession
Bacteroides dorei strain 175 16S ribosomal RNA, partial sequence  839    839   100%  0.0   99.57  NR_041351.1

Alignments:
>Bacteroides dorei strain 175 16S ribosomal RNA, partial sequence
Sequence ID: NR_041351.1 Length: 1493
Range 1: 341 to 800

Score:839 bits(454), Expect:0.0,
Identities:458/460(99%),  Gaps:0/460(0%), Strand: Plus/Plus

Query  1    CCTACGGGGGGCAGCAGTGAGGAATATTGGTCAATGGGCGATGGCCTGAACCAGCCAAGT  60
            |||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct  341  CCTACGGGAGGCAGCAGTGAGGAATATTGGTCAATGGGCGATGGCCTGAACCAGCCAAGT  400


Query #2: otu1 Query ID: lcl|Query_16951 Length: 460

Sequences producing significant alignments:
                                                                  Max    Total Query   E   Per.
Description                                                       Score  Score cover Value Ident  Accession
Bacteroides vulgatus ATCC 8482 16S ribosomal RNA, partial...      811    811   100%  0.0   98.48  NR_074515.1
Bacteroides paurosaccharolyticus strain WK042 16S ribosomal RN... 673    673   100%  0.0   93.06  NR_112668.1


Alignments:
>Bacteroides dorei strain 175 16S ribosomal RNA, partial sequence
Sequence ID: NR_041351.1 Length: 1493
Range 1: 341 to 800

Score:833 bits(451), Expect:0.0,
Identities:457/460(99%),  Gaps:0/460(0%), Strand: Plus/Plus

Query  1    CCTACGGGGGGCAGCAGTGAGGAATATTGGTCAATGGGCGATGGCCTGAACCAGCCAAGT  60
            |||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct  341  CCTACGGGAGGCAGCAGTGAGGAATATTGGTCAATGGGCGATGGCCTGAACCAGCCAAGT  400


Query #3: otu2 Query ID: lcl|Query_16952 Length: 460

Sequences producing significant alignments:
                                                                  Max    Total Query   E   Per.
Description                                                       Score  Score cover Value Ident  Accession
Bacteroides sartorii JCM 16497 16S ribosomal RNA, partial...      684    684   100%  0.0   93.48  NR_113064.1
Bacteroides paurosaccharolyticus strain WK042 16S ribosomal RN... 678    678   100%  0.0   93.28  NR_112668.1


Alignments:
>Bacteroides dorei strain 175 16S ribosomal RNA, partial sequence
Sequence ID: NR_041351.1 Length: 1493
Range 1: 341 to 800

Score:839 bits(454), Expect:0.0,
Identities:458/460(99%),  Gaps:0/460(0%), Strand: Plus/Plus

Query  1    CCTACGGGTGGCAGCAGTGAGGAATATTGGTCAATGGGCGATGGCCTGAACCAGCCAAGT  60
            |||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||
Sbjct  341  CCTACGGGAGGCAGCAGTGAGGAATATTGGTCAATGGGCGATGGCCTGAACCAGCCAAGT  400

... и так один.

Теперь для каждого "Запроса №" в файле мне нужно извлечь информацию абзаца, содержащуюся между "Запрос №" и "Выравнивание", и распечатать в другом выходном файле.

Я попытался использовать следующий базовый код, но столкнулся с некоторыми трудностями при программировании на Perl. Может ли кто-нибудь помочь мне в решении проблемы? Большое спасибо

#!/usr/bin/perl -w

use warnings;

open(GENBANK, "Bact_ncbi_output.txt") or die;

my $outfile = 'output.txt';
open OUT,'>',$outfile
  or die "Could not open $outfile : $!";

$content = join("", <GENBANK>);
close GENBANK;

$content =~ /Query\s+([A-Z0-9_.]+)Alignments$/;

print OUT "$content\n";
  • $content =~ /Query((?:(?!Выравнивания).)*)Выравнивания$/gs; ssr1012 05.11.2019
  • Спасибо за ваш ответ. Я отформатировал скрипт в соответствии с вашим предложением, заменив $content =~ /Query\s+([A-Z0-9_.]+)Alignments$/; с $content =~ /Query((?:(?!Выравнивания).)*)Выравнивания$/gs; но выравнивание (выравнивание абзаца и следующий запрос) по-прежнему печатается в выводе. Есть ли у вас предложения ? RebiKirl 05.11.2019

design-patternsextractoutputperlncbi

Ответы

Ответ 1 · рейтинг 2 · ssr1012

Пожалуйста, попробуйте это:

#!/usr/bin/perl -w

use warnings;

open(GENBANK, "txt.txt") or die "";
local $/; $_= <GENBANK>; my $content = $_;

my $outfile = 'output.txt';
open(OUT,">",$outfile) or die "Could not open $outfile : $!";
my (@fetch) = $content=~m{(Query\s*\#((?:(?!Alignments\:\n).)*)\nAlignments\:\n)}gs;
#print OUT @fetch;
print OUT join "\n", @fetch;

Пожалуйста, измените, где вам нужно.

Спасибо.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы