我有一个CSV输入文件(input.csv),其数字如下:
1.34,7.56,4.57,6.7,4.9, 3.4,5.7,5.4,........
我想编辑文件并在字段之间插入数字和冒号,如;
1:1.34 2:7.56 3:4.57 4:6.7 5:4.9 6:3.4 7:5.7 8:5.4..........
这是我的剧本:
#!/usr/bin/perl
use strict;
use warnings;
#Opening the CSV file
my $csv_file = "input.csv";
open (my $fh, "<", $csv_file) or die "Cannot open '$csv_file': $! ";
#parsing
while (my $lines = <$fh> ) {
chomp $lines;
my @features = split (',', $lines);
print "$lines \n";
}
#inserting numbers
for ( my $x = 1; $x <= 1371; $x++ ){
print $x . ":" . $features[$x-1];
}
我收到错误: 全球符号&#34; @ features&#34;需要在script_T.pl第23行显式包名。
答案 0 :(得分:1)
这可以通过split
,map
和join
整齐地完成,就像这样。
#!/usr/bin/perl
use strict;
use warnings;
while ( <> ) {
my @fields = split /\s*,\s*/;
print join ' ', map "$_:$fields[$_-1]", 1 .. @fields;
}
<强>输出强>
1:1.34 2:7.56 3:4.57 4:6.7 5:4.9 6:3.4 7:5.7 8:5.4 9:........
程序期望输入文件的路径作为命令行上的参数,如此
./count_fields.pl input.csv
答案 1 :(得分:0)
在while循环之前定义@features
:
my @features;
while (my $lines = <$fh> ) {
chomp $lines;
@features = split (',', $lines);
print "$lines \n";
for(my $x=1; $x <=1371 ; $x++){
print $x .":".$features[$x-1];
}
}
答案 2 :(得分:-1)
您已使用“my”在while块中声明了@features数组,这使得它仅在块中可用。在之前宣布它。 要了解有关perl范围的更多信息,请阅读