亲爱的stackoverflow社区,
我试图使用基于网页的卷曲查找添加条目到tsv文件,如下所示:
#!/usr/bin/env perl
my $file = "TfbG_peaks2.tsv";
open(INFO, $file) or die("Could not open file.");
#my $VNG = "VNG1649G";
my $query = "(\<title\>)([A-Za-z0-9\- ]*)";
foreach $line (<INFO>) {
$line =~ /(^VNG\w*)/;
$VNG = $1;
my $url = "http://www.ncbi.nlm.nih.gov/gene/?term=$VNG";
my $page = `curl $url`;
if ($page =~ /(\<title\>)(VNG)/) {
$name = "hypothetical protein";
$abbrev = " ";
$longname = $name;
}
elsif ($page =~ /$query/) {
$name = $2;
$name =~ /^(\w+)(\s+)(([A-Za-z0-9\-]+\s*)+)/;
$abbrev = $1;
$longname = $3;
}
my @values = split('\t', $line);
splice @values, 1, 0, $abbrev;
splice @values, 2, 0, $longname;
print join "\t", @values;
print "\n";
}
Run Code Online (Sandbox Code Playgroud)
输入tsv数据文件的行看起来像
VNG1374G Chromosome 1022977 1023252 4.184852806 2.877295983 3.362660404 3.961922335 3.932399564
要么
VNGt26 Chromosome 1153828 1154334 4.879550683 3.730707809 5.515198268 5.30410069 5.328461226
我正在查找的包含<title> HTML标记的网页的页面源中唯一一行就像
<title>trn26 [Halobacterium sp. NRC-1] - Gene - NCBI</title>
对于具有trn名称等的条目
<title>gspE1 type II secretion system protein [Halobacterium sp. NRC-1] - Gene - NCBI</title>
或者喜欢
<title>VNG1872C hypothetical protein [Halobacterium sp. NRC-1] - Gene - NCBI</title>
对于具有非trn名称的条目.
该代码适用于非trn名称,即打印类似的东西
VNG0218G gspE1 type II secretion system protein Chromosome 186556 186979 4.072750978 2.233376793 2.684902216 3.714576271 3.52083442
或类似的东西
VNG2556H hypothetical protein Chromosome 1917796 1918082 3.778968581 2.582944032 2.981130347 3.940093432 4.286983604
但对于trn条目打印
VNGt26 <title> Chromosome 1153828 1154334 4.879550683 3.730707809 5.515198268 5.30410069 5.328461226
而不是预期的
VNGt26 trn26 Chromosome 1153828 1154334 4.879550683 3.730707809 5.515198268 5.30410069 5.328461226
为什么trn案件会有所不同?对于trn和非trn情况,网页源代码行的格式似乎相同,我无法理解为什么我的正则表达式会因此情况而失败.
此外,我是Perl的新手,所以欢迎任何关于组织或保持代码清洁和简洁的建议:).
非常感谢,
迈克尔