我在代码的这一部分花了几个小时但仍然不知道如何使它工作,所以任何建议都会很棒!
我有2个文件,list1.txt和dictionary.txt。 list1.txt看起来像
rs1
rs2
rs4
rs5
而dictionary.txt看起来像
rs1 1 A G
rs2 2 C T
rs3 3 A A
rs4 4 G G
列由空格分隔 - 有四列。 我想要做的是对于list1.txt中的每个单词,搜索word的word.txt,如果它存在,则将dictionary.txt中的整行打印到第三个文件中。如果在dictionary.txt中不存在该单词,则只打印出单词。
所以,如果我使用上面列出的文件运行下面的程序,我的结果应该是
rs1 1 A G
rs2 2 C T
rs4 4 G G
rs5
上述计划:
open(LIST1, '<', 'test_chr1_22.txt') or die "Could not open chr1_22.txt: $!";
open(OUTPUT, '>', 'test_chr1_22_all_info.txt');
foreach my $line1 (<LIST1>)
{
foreach my $line (@DICT)
{
if ($line =~ m/"$line1"/)
{
print OUTPUT"$line\n";
}
}
}
这是我现在的代码。我知道它没有我的第二个条件,如果单词在字典中不存在,那么只需打印单词。但是,我甚至无法得到第一部分,如果单词在字典中,那么打印行。我从这个空白文本文件中得到了什么。有谁知道发生了什么事?
答案 0 :(得分:3)
m/"$line1"/
出于多种原因是错误的:
"
,因此永远不会匹配。$line1
的内容以从任意文本形成正则表达式。无论如何,一旦你使用循环和哈希查找替换效率极低的嵌套循环,正则表达式匹配的需求就会消失。
my %dict;
while (<$DICT>) {
my ($key) = split;
$dict{$key} = $_;
}
while (<$INPUT>) {
my ($key) = split;
print $dict{$key} // $_;
}