http://qs321.pair.com?node_id=798923


in reply to Re^3: how to compare column 1 to column 2 and vice versa from multiple rows.
in thread how to compare column 1 to column 2 and vice versa from multiple rows.

Could you please tell me what each line is doing in this code.
if ( $seen{ join ' ', sort @F }++ ) { $uniq{$F[0]}++; $uniq{$F[1]}++; } END { print for keys %uniq; }
code: Thanks to ccn

Also, before I execute this code I fill the  @F from the file input right?

my @F = <DATA>;

Replies are listed 'Best First'.
Re^5: how to compare column 1 to column 2 and vice versa from multiple rows.
by ccn (Vicar) on Oct 02, 2009 at 20:44 UTC
    No you don't fill @F. The -a switch does it for you. see perldoc perlrun The code above is complete script. Just run it as shown in usage.

    Now explanations:

    #!/usr/bin/perl -lan # Usage: thisscript.pl genes.txt # %seen is a hash where we store keys composed from seen rows # @F is an array of 2 elements $F[0] is a first column of your file an +d $F[1] is the second one (see [doc://perlrun] -a switch # So the key for row is composed by concatenation of sorted columns if ( $seen{ join ' ', sort @F }++ ) { # %uniq hash will keep seen columns first and second $uniq{$F[0]}++; $uniq{$F[1]}++; } # the code above is loops over each row of file because of -n switch s +ee [doc://perlrun] END { # this block run just before exit print for keys %uniq; }