perl
2015-11-17 3 views 0 likes 
0

Привет Я пытаюсь удалить содержимое файла на основе соответствия регулярных выражений. Вот следующий код:Редактирование файла в perl

my $file = "Cioin_PatchAnalysis.txt"; 
local $/ = 'Query='; 
my @content =(); 
open (INFILE, $file) || die "error2: $!"; 
while (<INFILE>) 
    { 
    chomp; 
    if ($_ =~ /\s*3374_Cioin/) 
    {#capture the query sequence 
     @content = $_; 
     print @content; 
    } 
    } 

Образец данных:

=================================================================== 
Query= 3374_Cioin 
     (24,267 letters) 

Database: /home/aprasanna/BLAST/DMel_renamedfile.fasta 
      14,047 sequences; 7,593,731 total letters 

Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, 
Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), 
"Gapped BLAST and PSI-BLAST: a new generation of protein database search 
programs", Nucleic Acids Res. 25:3389-3402. 

Query= 578_Antlo 
     (88 letters) 
========================================================= 

Я хочу, чтобы удалить из Query =3374_Coin... до -3402. до следующего разделителя записей. Я могу хранить согласованную часть в @content. Однако я не могу удалить его в исходном файле. Я хочу, чтобы мой исходный файл имел только Query= 578_Antlo!

Я очень новичок в Perl.

+0

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

+1

Посмотрите документацию для переключателя '-i' в документации' 'perlrun' '(http://perldoc.perl.org/perlrun.html#*-i* [_extension_]). Это особенно полезно, если вы пишете одноразовый скрипт. Например, 'perl -i.orig -ne 'BEGIN {$/=" Query "} печатать, если/3374_Cioin /' input.txt' не должен делать трюк, а также берет резервную копию исходного файла. – srvsh

ответ

1

Самый простой способ - просто написать все строки, которые вы хотите в другой файл.

Я хотел бы предложить что-то вроде:

my $file = "Cioin_PatchAnalysis.txt"; 
my $outfile = "Fixed_Cioin_PatchAnalysis.txt"; 
local $/ = 'Query='; 
my @content =(); 
open (INFILE, $file) || die "error2: $!"; 
open(my $outfile, '>', $outfile) or die "Could not open file '$outfile' $!"; 
while (<INFILE>) 
    { 
    chomp; 
    if ($_ !~ /\s*3374_Cioin/) 
    {#capture the query sequence 
     @content = $_; 
     print $outfile @content; 
    } 
    } 

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

my $file = "Cioin_PatchAnalysis.txt"; 
local $/ = 'Query='; 
my @content =(); 
open (INFILE, $file) || die "error2: $!"; 

while (<INFILE>) 
    { 
    chomp; 
    if ($_ !~ /\s*3374_Cioin/) 
    {#capture the query sequence 
     push @content, $_; 
    } 
    } 

open(my $outfile, '>', $file) or die "Could not open file '$outfile' $!"; 
print $outfile @content; 
+0

Привет, это сработало. Кроме того, я настраивал по-другому, используя push \ @new, \ @content, если только (regex). – Arun

+0

прохладный. happey, чтобы услышать. – Srgrn

Смежные вопросы