假设数据为:
1 2 3 4 5 6
a a s d f c
z s g qq
我在Perl中编写了以下脚本以按列分割数据:
#!/usr/bin/perl
use strict;
use warnings;
#use Text::CSV;
my $file = $ARGV[0] or die "Need to get CSV file on the command line";
open(my $data, '<', $file) or die "Could not open '$file' $!";
while (my $line = <$data>) {
chomp $line;
my @fields = split " " , $line;
print "$fields[2]\n";
}
当我运行命令时,我得到以下输出
3
s
g
当我应该得到输出:
3
s
第3行应该有空格。脚本会移动其他列的值以填充空白列。
答案 0 :(得分:4)
split ' '
是一种特殊的拆分功能,其工作方式与split /\s+/
类似(除了前导空字段被丢弃)。由于您要在每个标签上拆分,而不是在一个或多个空白字符的组上拆分,因此您应该使用split /\t/
进行拆分。
答案 1 :(得分:2)
分隔符是制表符,因此请使用制表符\t
来分割而不是空格:
#!/usr/bin/perl
use warnings;
use strict;
open my $data, '<', "file.txt" or die "Could not open file: $!";
while (my $line = <$data>)
{
chomp $line;
my @fields = split ("\t", $line);
print "$fields[2]\n";
}
输出:
3
s
注意:“#&#39;之后有一个空白行。在输出(即第3行)。