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