Since you don't describe the data format, this is going to be a general soln.
If you have space delimited text you could do the following.
This is the datafile of space delimited.
1 fruit apple,pear
2 fruitloop orange,yellow
3 fruitcake yummy,bad
4 car bug,volvo,toyota,jag
#!/usr/bin/perl -w
use strict;
my $keywordcol = 2; # keywords are in this column
my $wordpattotest = '\wag';
my $wordtotest = 'orange';
my $datafilename = 'in.dat';
open(IN,$datafilename);
my @data;
while(<IN>) {
my (@fields) = split(/\s+/,$_);
# if you wanted to have data separated by tabs, replace \s with \t
+,
# remove the '+' if you don't want multiple consecutive
# separators to be treated as one.
if( $fields[$keywordcol] =~ /$wordpattotest/ ) {
print;
}
# or if you wanted to find exact words you could loop
# over the keywords
foreach my $w ( split(/,/,$fields[$keywordcol] ) ) {
print if( $w eq $wordtotest);
}
push @data, \@fields;
}
# If you wanted to sort the data by a specific column
my $coltosort = 1;
foreach my $row ( sort { $a->[$coltosort] cmp $b->[$coltosort] } @data
+ ) {
# replace cmp with <=> if data is numeric
print join(' ', @$row), "\n"
}
|