-4

我有一个my.csv包含以下内容的 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]";
}

请帮我编写一个脚本来显示上述场景。

4

2 回答 2

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
于 2012-08-31T10:43:39.397 回答
0

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

if ($field[0] >= $X) { 
    print ... 
}
于 2012-08-31T10:00:34.180 回答