#!/usr/local/bin/perl use warnings; use strict; open(T, (shift @ARGV)) or die; my %order; my $i; while () { s/^\s+//; s/\s+$//; next if not length; warn("$_ seen twice"), next if exists $order{$_}; $order{$_} = $i++; } close T or die; my @l = <>; sub first( $ ) { for (shift) { /^([^,]+),/ or die; return $1 } } print sort { $order{first($a)} <=> $order{first($b)} } @l;