私は次のことを実行しようとしている 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 と比較するのに最適でしょうか? それとも、別の方法でアプローチする必要がありますか?