我有一个输出文件,它是一个二维数组(这个文件是在运行脚本编写后生成2D数组生成的输出),我必须读取特定列下的信息,比如第1列。换句话说,怎么做我在第1栏下阅读并打印出列出的所有行的信息。
有什么建议吗?
__DATA__
1 2 3 4 5 6 7 8 9
A B C D E F G H I
93 48 57 66 52 74 33 22 91
从上面的数据中我想逐列提取信息,如果我想要第1列的信息,我应该只能列出以下输出。 想列出然后我想要
输出:
1
A
93
答案 0 :(得分:3)
所有更正后的最终版本:
#!/usr/bin/perl
use strict;
use warnings;
my $column_to_show = 0;
while ( <DATA> ) {
last unless /\S/;
print +(split)[$column_to_show], "\n";
}
__DATA__
1 2 3 4 5 6 7 8 9
A B C D E F G H I
93 48 57 66 52 74 33 22 91
输出:
C:\Temp> u
1
A
93
print +(split)[$column_to_show], "\n";
的说明:
将字符串EXPR拆分为字符串列表并返回该列表。 ... 如果省略EXPR,则拆分$ _字符串。如果PATTERN也被省略, 在空格上拆分(跳过任何前导空格后)。
所以:(split)[3]
选择split
返回的列表的第四个元素。 +
前面的(split)
是帮助perl
正确解析表达式所必需的。见perldoc -f print
:
另外要注意不要遵循 用左括号打印关键字 除非你想要相应的 右括号终止 印刷品的参数 - 介入
+
或括号括起来 参数。
我完全建议每个Perl程序员偶尔浏览一下所有文档perldoc perltoc。它在你的电脑上。
答案 1 :(得分:3)
my $line ;
foreach $line (@DATA)
{
my @DATA1 = split( / +/, "$line" );
print "first element of array is $DATA1[0]";
}
__DATA__
1 2 3 4 5 6 7 8 9
A B C D E F G H I
93 48 57 66 52 74 33 22 91
输出: -
1
A
93
答案 2 :(得分:1)
尝试使用此代码。基本上我将数据加载到数组数组
每一行都是对行的引用。
#!/usr/bin/perl
use strict;
use warnings;
my $TwoDimArray;
while (my $line=<DATA>) {
push @$TwoDimArray, [split(/,/,$line)];
};
for my $column (0..2) {
print "[$column,0] : " . $TwoDimArray->[0]->[$column] ."\n";
print "[$column,1] : " . $TwoDimArray->[1]->[$column] ."\n";
print "\n";
}
__DATA__
1,2,3,04,05,06
7,8,9,10,11,12
答案 3 :(得分:1)
地图功能是你的朋友:
open FILE, "data.txt";
while ($line = <FILE>) {
chomp($line);
push @data, [split /[, ]+/, $line];
}
close FILE;
@column1 = map {$$_[0]} @data;
print "@column1\n";
在data.txt中就像:
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
13, 14, 15, 16
答案 4 :(得分:1)
perl -lne '@F = split /\s+/ and print $F[1]'
答案 5 :(得分:1)
这可能是你想要的:
use English qw<$OS_ERROR>; # Or just use $!
use IO::Handle;
my @columns;
open my $fh, '<', 'columns.dat' or die "I'm dead. $OS_ERROR";
while ( my $line = <$fh> ) {
my @cols = split /\s+/, $line;
$columns[$_][$fh->input_line_number()-1] = $cols[$_] foreach 0..$#cols;
}
$fh->close();
答案 6 :(得分:0)
您可以直接按元素访问它们。
$arrays[0][0] = 1;
$arrays[0][1] = 2;
$arrays[1][0] = 3;
$arrays[1][1] = 4;
for (my $i = 0; $i <= $#{$arrays[1]}; $i++) {
print "row for $i\n";
print "\tfrom first array: " . $arrays[0][$i] . "\n";
print "\tfrom second array: " . $arrays[1][$i] . "\n";
}
打印
row for 0
from first array: 1
from second array: 3
row for 1
from first array: 2
from second array: 4