#!/usr/bin/perl -s use strict; our ($fs); my $ks = shift or die("join [-fs=...] keys tab?\n"); ##my $f1 = shift; $fs ||= ':'; jkeys($ks); sub jkeys{ my ($ks)=@_; my ($c1,$c2,$ja2); my $e1 = <>; chomp $e1; my $n=0; for (split(/\s*$fs\s*/,$e1)){ $c1->{$_} = $n++ } $n=0; for (split(/\s*$fs\s*/,$ks)){ die("Field '$_' not found in ($e1) \n") unless defined $c1->{$_}; push(@{$ja2},$n); $c2->{$_} = $n++} print "$e1\n"; my %engolef=(); my %engole=(); my $lin=0; ### engole f1 while(<>){ chomp; $lin++; my @a=split(/\s*$fs\s*/,$_); my $k = join("$fs", @a[@$ja2]); if(defined $engole{$k}) { warn ("removed repetition of $k in ($lin)($engole{$k}) $_\n"); } else { push @{$engolef{$k}}, [$_]; $engole{$k}=$lin; print "$_\n"} } } __END__ =head1 NAME tabkeys - check keys in (textual) table =head1 SYNOPSIS tabkeys [-fs=#] tab1 "field1:field2" =head1 DESCRIPTION =head1 FORMATS each table: country:capital first line - name of the fields Portugal:Lisboa tuple 1 France:Paris tuple 2 Spain:Madrid tuple n =head1 Options -fs='!' changes the field separator (default ":") =head1 AUTHOR J.Joao Almeida, jj@di.uminho.pt =head1 SEE ALSO perl(1). =cut