我是尝试执行以下操作的 perl 新手:
1) 获取用户输入
2) 将输入与文件 1 的列 1 中的该值的实例匹配,并将列 2 中的相应值存储在散列、数组散列或散列散列中。(下面的代码存储在数组的哈希中,但我不确定这是否是完成下面 3 的最佳选择)
3)我需要找到文件 2 中第一列的所有实例(如果存在)=文件 1 中的第 2 列。
为简单起见,我在下面提供了示例文件。
我正在尝试将输入文件第 1 列中的用户输入“AAA”转换为哈希或数组,作为第 2 列中所有相应值的键。
我的输入文件在第 1 列中有多个“AAA”实例,第 2 列的值不同,在第 1 列和第 2 列中也有多个“AAA”和“BBB”实例。我相信为了正确输出这个我需要使用散列的散列,但我不确定在语法上如何处理它。
我试过搜索这个网站并找到了一些例子,但恐怕我只会让自己更加困惑。
输入文件示例。
AAA BBB
AAA CCC
AAA BBB
BBB DDD
CCC AAA
我的代码示例
#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;
use Data::Dumper;
#declare values
my %hash = ();
#Get protein name from user
print "Get column 1 value: ";
my $value = <STDIN>;
chomp $value;
#open input file
open FILE, "file" or die("unable to open file\n");
while(my $line = <FILE>) {
chomp($line);
my($column1, $column2) = split("\t", $line);
if ($column1 eq $value) {
push @{ $hash{$column1} }, $column2;
}
}
close FILE;
print Dumper(\%hash);
代码输出
$VAR1 = {
'AAA' => [
'BBB',
'CCC'
]
};
我的问题是我当前的数组设置哈希最适合读取文件 2 中的第 1 列并将其与文件 1 的第 2 列进行比较?还是我应该以不同的方式处理它?