Arrays 文件句柄数组上的Perl嵌套foreach循环
我想打印出两个文件的第二列。最终我会将它打印到另一个文件中,但现在我只想将它输出到终端。我试图通过制作两个文件的数组来实现这一点。这是我的代码,但它不返回任何内容Arrays 文件句柄数组上的Perl嵌套foreach循环,arrays,perl,file-handling,Arrays,Perl,File Handling,我想打印出两个文件的第二列。最终我会将它打印到另一个文件中,但现在我只想将它输出到终端。我试图通过制作两个文件的数组来实现这一点。这是我的代码,但它不返回任何内容 unless (open COL1, '<'. $file1) {die "Couldn't open '$file1'\n";} unless (open COL2, '<'. $file2) {die "Couldn't open '$file2'\n";} while (!eof(COL1) and !eof(COL
unless (open COL1, '<'. $file1) {die "Couldn't open '$file1'\n";}
unless (open COL2, '<'. $file2) {die "Couldn't open '$file2'\n";}
while (!eof(COL1) and !eof(COL2)) {
my @line = [<COL1>, <COL2>];
#my $line2 = <COL2>;
foreach my $line (@line) {
foreach my $row ($line){
my @column2 = split( /\t/, $row);
print $column2[1];
}
}
}
close COL1;
close COL2;
除非(打开COL1,将单个元素分配给数组@line
,否则数组引用将指向两个文件的内容
my @line = [<COL1>, <COL2>];
my@line=[,];
你可能想要
my @line = (scalar <COL1>, scalar <COL2>);
my@line=(标量,标量);
i、 e.从第一个控制柄指定一行,从第二个控制柄指定一行
完整的程序看起来像
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
open my $in1, '<', shift or die $!;
open my $in2, '<', shift or die $!;
until (eof $in1 || eof $in2) {
my @lines = (scalar <$in1>, scalar <$in2>);
chomp @lines;
my @columns;
for my $line (@lines) {
push @columns, (split /\t/, $line)[1];
}
say join "\t", @columns;
}
!/usr/bin/perl
使用警告;
严格使用;
使用特征qw{say};
打开我的$in1,'这有一个小问题。它将所有内容一起打印。与原始文件中的列格式不同。我尝试不使用chomp,将其打印为列,但对齐方式很奇怪。如何将其打印为两列。另请参见(以行并行方式处理文件)
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
open my $in1, '<', shift or die $!;
open my $in2, '<', shift or die $!;
until (eof $in1 || eof $in2) {
my @lines = (scalar <$in1>, scalar <$in2>);
chomp @lines;
my @columns;
for my $line (@lines) {
push @columns, (split /\t/, $line)[1];
}
say join "\t", @columns;
}
chomp( my @lines = (scalar <$in1>, scalar <$in2>) );
say join "\t", map +(split /\t/, $_)[1], @lines;