在CSV中search一个值

我有csv文件和一个值。 我想search的是这个值是否存在于CSV中。 您可以请帮助,并告诉哪些代码可以用来打开CSV文件,然后find值是否可用的CSV或不

 perl -lne 'if(/"your_value"/){print;exit}' your_csv_file 

为什么不简单地使用grep一个命令行就像这样:

 grep 'your_value' your_csv_file 

如果你可以安装一个CPAN模块,试试这个: DBD :: CSV ,你可以像关系数据库一样处理你的文件,通过DBI通过SQL接口查询。

如果你可以把你的价值在一个正则表达式,我认为这应该工作:

 perl -p -e 'unless (m/,valueToSearchAsRegex,/) {$_=""}' filename 

它将打印具有该值的文件文件中的所有行。

否则,如果你想在Perl程序中使用Text :: CSV来做,你可以试试:

 my $csv = Text::CSV->new(); open my $io, "<", $file or die "$file: $!"; my $found = 0; while (my $row = $csv->getline ($io)) { my @fields = @$row; for my $field (@fields) { if ($field =~ m/valueToSearchAsRegex/) { $found = 1; } } } 

我想这是你想要的:

 #!/usr/bin/perl -w use strict; my $value = 'val6'; my @array = <DATA>; foreach my $a (@array) { my @array2 = split (/,/, $a); foreach my $b (@array2) { if ( $b eq $value ) { print "Given Value is available in hte CSV\n"; } } } __DATA__ val1,val2,val3,val4 val5,val6,val7,val7 

输出

 Given Value is available in hte CSV 

只要确保不将csv读入数组,如果您的csv文件很大。 使用while循环代替文件句柄。

这是grep另一个镜头

 #!/usr/bin/perl -w use strict; my $value = 'val5'; my @array = <DATA>; my $out = grep { /$value/ } @array; if ($out) { print "Given value is present in the CSV\n"; } else { print "Given value is not present in the CSV\n"; } __DATA__ val1,val2,val3,val4 val5,val6,val7,val7 

OUTPUT:

 Given value is present in the CSV