选项卡是

时间:2015-10-15 08:34:46

标签: perl

假设数据为:

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行应该有空格。脚本会移动其他列的值以填充空白列。

2 个答案:

答案 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行)。