用于将csv文件从特定行读取到文件末尾的Perl脚本

时间:2012-08-31 09:14:51

标签: perl csv perl-module

我有一个包含以下内容的CSV文件my.csv

abc,yyy

efg,zzz

zsc,vvv

uvw,ggg

根据变量$X中的值,我需要从该特定值读取,直到文件结束。例如:

如果$X = efg,则输出为:

efg,zzz

zsc,vvv

uvw,ggg

$X = zsc

zsc,vvv

uvw,ggg

这是我开发的脚本,它读取CSV文件的全部内容并显示它:

use strict;
use warnings;

open(my $data, '<', $file) or die "Could not open '$file' $!\n";

while (my $line = <$data>) {  
    chomp $line; 
    my @field = split "," , $line;
    print "$field[0] $field[1]";
}

请帮我一个脚本来显示上面提到的场景。

2 个答案:

答案 0 :(得分:1)

此解决方案将第1行跳到匹配的文本if (1 .. /\b$start_word\b/),并将匹配文本中的所有行打印到文件的末尾。

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

my $start_word = 'efg';
my @data;

while (<DATA>) {
    chomp;
    if (1 .. /\b$start_word\b/) {
        #print if /\b$start_word\b/;
        @data = [split /,/] if /\b$start_word\b/;
    }
    else {
        #print;
        push @data, [split /,/];
    }
}

# Do something with @data

__DATA__
abc,yyy
efg,zzz
zsc,vvv
uvw,ggg

答案 1 :(得分:0)

如果您只想打印第一个字段等于或大于指定值(例如$X)的行,请使用条件:

if ($field[0] >= $X) { 
    print ... 
}