redemption has asked for the wisdom of the Perl Monks concerning the following question:

...and sort them by another field.
  • Comment on How do i extract records from a file containing a certain keyword in 1 field?

Replies are listed 'Best First'.
Re: How do i extract records from a file containing a certain keyword in 1 field?
by Joost (Canon) on May 22, 2002 at 15:30 UTC
    That depends on the type of file and the type of fields.

    Please show some data and the code you've tried, so we can help you.

    as a very general hint, see:

    perldoc -f index perldoc -f sort perldoc perlre
    -- Joost downtime n. The period during which a system is error-free and immune from user input.
Re: How do i extract records from a file containing a certain keyword in 1 field?
by stajich (Chaplain) on May 22, 2002 at 17:01 UTC
    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" }