gpt4 book ai didi

perl - 为什么我的最后一行总是输出两次?

转载 作者:行者123 更新时间:2023-12-05 09:26:02 24 4
gpt4 key购买 nike

我有一个包含蛋白质序列和一些元数据的 uniprot 文档。我需要使用 perl 来匹配序列并将其打印出来,但由于某种原因,最后一行总是出现两次。我写的代码在这里

#!usr/bin/perl
open (IN,'P30988.txt');
while (<IN>) {

if($_=~m /^\s+(\D+)/) { #this is the pattern I used to match the sequence in the document
$seq=$1;
$seq=~s/\s//g;} #removing the spaces from the sequence

print $seq;
}

我改为尝试 $seq.=$1; 但它打印了 4.5 次序列。我确定我在这里犯了一个错误,但不确定是什么。这是输入文件 https://www.uniprot.org/uniprot/P30988.txt

最佳答案

这里是您的代码重新格式化并在运算符之间添加了额外的空格,以使语句运行的范围更清楚。

#!usr/bin/perl
open (IN,'P30988.txt');
while (<IN>) {

if ($_ =~ m /^\s+(\D+)/) {
$seq = $1;
$seq =~ s/\s//g;
}

print $seq;
}

print 命令的放置意味着 $seq 将针对输入文件中的每一行 打印——即使那些没有'匹配正则表达式。

我怀疑你想要这个

#!usr/bin/perl
open (IN,'P30988.txt');
while (<IN>) {

if ($_ =~ m /^\s+(\D+)/) {
$seq = $1;
$seq =~ s/\s//g;

# only print $seq for lines that match with /^\s+(\D+)/
# Also - added a newline to make it easier to debug

print $seq . "\n";
}
}

当我运行时,我得到了这个

MRFTFTSRCLALFLLLNHPTPILPAFSNQTYPTIEPKPFLYVVGRKKMMDAQYKCYDRMQ 
QLPAYQGEGPYCNRTWDGWLCWDDTPAGVLSYQFCPDYFPDFDPSEKVTKYCDEKGVWFK
HPENNRTWSNYTMCNAFTPEKLKNAYVLYYLAIVGHSLSIFTLVISLGIFVFFRSLGCQR
VTLHKNMFLTYILNSMIIIIHLVEVVPNGELVRRDPVSCKILHFFHQYMMACNYFWMLCE
GIYLHTLIVVAVFTEKQRLRWYYLLGWGFPLVPTTIHAITRAVYFNDNCWLSVETHLLYI
IHGPVMAALVVNFFFLLNIVRVLVTKMRETHEAESHMYLKAVKATMILVPLLGIQFVVFP
WRPSNKMLGKIYDYVMHSLIHFQGFFVATIYCFCNNEVQTTVKRQWAQFKIQWNQRWGRR
PSNRSARAAAAAAEAGDIPIYICHQELRNEPANNQGEESAEIIPLNIIEQESSA

关于perl - 为什么我的最后一行总是输出两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74629067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com