查找包含具有特定值的字段的所有CSV记录

时间:2015-04-27 11:42:51

标签: perl csv

我是Perl的初学者,我需要你的帮助。

我有一个文件,其中包含处理我想要分析的其他文件的结果。我的文件包含以下结果:

default,primary,secondary,copy_directory,forced_copy_flag,always_allow_dump,type_of_dump,full_memory_dump,

d100spuptl25e0,/dev/lg_dumplv,/dev/sysdumpnull,/var/adm/ras,1,1,fault,disallow,
doc1,/del,/dev/null,/ras,1,0,fw-assisted,disallow,
doc2,/dev/lg_dumplv,/dev/sysdumpnull,//ras,1,1,fw,disallow,
doc3,/dev/lg_dumplv,/dev/sysdumpnull,/var/adm/ras,1,fault,fw-assisted,disallow,
doc4,5,fault,7,8,9,10,disallow, 

每行的第一个字段是文件的名称;应忽略第一个default文件:只能处理其他文件。

我想要其中一个值为fault的文件的名称,以及此类文件的数量。

在本案例中,结果将是:

number of files: 3
File names are:
d100spuptl25e0
doc3
doc4

1 个答案:

答案 0 :(得分:1)

尝试自己解决问题非常重要,我真的不应该坚持要求你至少做出一些的努力。但我厌倦了不断强调这一点,今天只是制定解决方案更容易。只是不要指望再次逃脱它!

这将按照您的要求进行

use strict;
use warnings;

use List::Util 'any';

open my $fh, '<', 'myfile.txt' or die $!;

my @files;

while ( <$fh> ) {
  next unless /\S/;
  chomp;
  my ($file, @fields) = split /,/;
  next if $file eq 'default';
  push @files, $file if any { $_ eq 'fault' } @fields;
}

printf "number of files: %d\n", scalar @files;
print "File names are:\n";
print "$_\n" for @files;

<强>输出

number of files: 3
File names are:
d100spuptl25e0
doc3
doc4