Arrays Perl读取文件以创建一个或多个数组

Arrays Perl读取文件以创建一个或多个数组,arrays,perl,while-loop,Arrays,Perl,While Loop,我有一些以下格式的文件: >Age PT 134 PT 145 PT 203 PT 237 >Karnofsky PT 167 >Overall_Survival PT 49 PT 126 PT 32 我要做的是读取一对文件,从两个文件创建一个数组,然后比较每个组合,以查找共享值,因此最终输出如下所示: >Age_vs_>CategoryA PT 145 PT 203 >Karnofsky_vs_>CategoryA NO SHARED VALUES

我有一些以下格式的文件:

>Age
PT 134
PT 145
PT 203
PT 237
>Karnofsky
PT 167
>Overall_Survival
PT 49
PT 126
PT 32
我要做的是读取一对文件,从两个文件创建一个数组,然后比较每个组合,以查找共享值,因此最终输出如下所示:

>Age_vs_>CategoryA
PT 145
PT 203
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126
>CategoryA
PT 134
PT 155
PT 209
>CategoryB
PT 47
PT 33
PT 155
我在构建阵列时遇到问题。我编写了以下代码:

my @array
while (<FILE1>) {
        my $line = $_;
        chomp $line;
        if ( $line =~ /^>/ ) {
                @array = $line;
        }
        if ( $line !~ /^>/ ) {
                push(@array, $line);
        }
}
澄清:我的目的是处理两对文件,查找每对数组之间的每个共享值。与前面描述的文件一起分析的文件可能如下所示:

>Age_vs_>CategoryA
PT 145
PT 203
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126
>CategoryA
PT 134
PT 155
PT 209
>CategoryB
PT 47
PT 33
PT 155
所需的输出不会在文件中包含任何比较。这样就不会有输出读数

>CategoryA_vs_>CategoryB
PT 155
my@File1;
我的%hash;
while(我的$line=){
chomp$行;
如果($line=~s/^>/){
按@File1,$line;
}
否则{
推送{$hash{$File1[-1]},$行;
}
}
使用数据::转储程序;
打印转储文件\@File1;
打印转储程序\%hash;
AoA:

my@数据;
我的名字;
我的$i=-1;
while(我的$line=){
chomp$行;
如果($line=~/^>/){
$i++;
按@names$line;
}
如果($line!~/^>/){
推送{$data[$i]},$line;
}
}

您对问题的定义不是很精确,但我认为哈希是达到合理效率水平的最佳选择

程序希望输入文件的pasth作为命令行上的参数

我为
CategoryA
发明了一些值,因此输出与您的示例相同

use strict;
use warnings;

my @categories;
my %data;

while (<>) {
  next unless /\S/;
  chomp;
  if ( /^>/ ) {
    push @categories, $_;
  }
  elsif (@categories) {
    ++$data{$categories[-1]}{$_};
  }
}

for my $i (0 .. $#categories-1) {
  for my $j ($i+1 .. $#categories) {
    my ($cat1, $cat2) = @categories[$i, $j];
    my @shared = grep $data{$cat1}{$_}, keys %{ $data{$cat2} };
    printf "%s_vs_%s\n", $cat1, $cat2;
    print @shared ? map "$_\n", @shared : "NO SHARED VALUES\n";
  }
}
输出

>Age_vs_>Karnofsky
NO SHARED VALUES
>Age_vs_>Overall_Survival
NO SHARED VALUES
>Age_vs_>CategoryA
PT 203
PT 145
>Karnofsky_vs_>Overall_Survival
NO SHARED VALUES
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126

明显的AoA格式本身并不存在。如果您确实提供了您遇到问题的代码的所需输出(数据结构格式),这会有所帮助<代码>[{name=>'Age',data=>['PT 134',…]},…]如果您显示的所需输出与示例输入相对应,则会有所帮助。您的输入中没有
CategoryA
,很抱歉我原来的帖子中出现了混乱。我最初只是想弄清楚如何创建一个数组数组,直到刚才的更新才清楚地解释了问题的其余部分。
>Age
PT 134
PT 145
PT 203
PT 237
>Karnofsky
PT 167
>Overall_Survival
PT 49
PT 126
PT 32
>CategoryA
PT 126
PT 158
PT 145
PT 203
>Age_vs_>Karnofsky
NO SHARED VALUES
>Age_vs_>Overall_Survival
NO SHARED VALUES
>Age_vs_>CategoryA
PT 203
PT 145
>Karnofsky_vs_>Overall_Survival
NO SHARED VALUES
>Karnofsky_vs_>CategoryA
NO SHARED VALUES
>Overall_Survival_vs_>CategoryA
PT 126