Perl正则表达式:在CSV文件中跳过几列

时间:2014-09-19 01:13:48

标签: regex perl

我想阅读一个csv文件并只检索几列。 但是,每个像素中的列数非常大(大约100列)

这里的问题是我试着阅读第1,2,3,4,5,60栏等的内容。 我只是想问一下是否有办法跳过RegExp中的第6-59列,所以我可以阅读第60列。

这是我到目前为止对1行的尝试,分号(;)是分隔符

if ($line =~ /^([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);[[^;]+;]{59};([^;]+)/) {
    print "$1, $2, $3, $4, $5, $6\n";
}

但代码不起作用。如果有人可以帮我这样做,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用核心模块Text::ParseWords

例如:

#!/usr/bin/perl
use strict;
use warnings;

use Text::ParseWords;

while (<DATA>) {
    my @words = parse_line( ";", 1, $_ );
    print join( ":", @words[ 0, 1, 4 ] ), "\n";
}

__DATA__
1;2;"3;4;5";6;7

输出:

1:2:7

在您的特定情况下,将行拆分为数组后,您可以使用@words[0..4]打印四个元素,或$words[60]打印第61个元素。