亲爱的 stackoverflow 社区,
我正在尝试根据以下内容使用基于网页的 curl 查找将条目添加到 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";
}
输入 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 的新手,所以欢迎任何关于组织或保持代码简洁明了的建议 :)。
非常感谢,
迈克尔