Hurrengo programak fitxategien edukia konparatzeko balio du. Argumentu gisa bi fitxategi jaso, eta lerro komunak bistaratzen ditu. Programak ez du edukia hitzez hitz edo esaldiz esaldi konparatzen, lerroak hartzen ditu aintzat. Lerroen ordenak ez du zertan bi fitxategietan berbera izanik programak detekta ditzan.
Adibide gisa, demagun fitx1.txt eta fitx2.txt fitxategiak konparatu nahi ditugula, beraien edukia honakoa izanik:
fitx1.txt fitx2.txt
arbela belarria
belarria haizea
danba danba
filma filma
gogorra
haizea
Beraien edukia konparatzeko edukiKonp.pl programa erabiliz gero, hauxe
da itzuliko ligukeena:
>perl edukiKonp.pl fitx1.txt fitx2.txt
>fitx2.txt 1 lerroan fitx1.txt 2 lerroan:
belarria
>fitx2.txt 3 lerroan fitx1.txt 3 lerroan:
danba
>fitx2.txt 4 lerroan fitx1.txt 4 lerroan:
filma
>fitx2.txt 2 lerroan fitx1.txt 6 lerroan:
haizea
>
Bi fitxategietan errepikatzen diren lerroak soilik bistaratzen ditu, aurretik fitxategi bakoitzean zenbatgarren lerroan agertzen diren ere adieraziz.
Hona hemen edukiKonp.pl programaren kodea:
edukiKonp.pl
#!/usr/local/bin/perl
# Komando-lerrotik bi fitxategi jaso eta lerro komunak
pantailaratu
use warnings;
use strict;
my ($fitxBat, $fitxBi, $lerro1, $lerro2, $l1, $l2,
%fitxHash);
$fitxBat = $ARGV[0],
$fitxBi = $ARGV[1];
open(FITX1, $fitxBat) ||
die(“Ezin $fitxBat fitxategia zabaldun”);
$l1 = 0;
$l2 = 0;
# gorde $fitxBat hash egituran
while ( $lerro1 = <FITX1> ) {
chomp($lerro1);
$l1++;
# gakoa: hitza
# balioa: agerpenaren lerro zenbakia
$fitxHash{$lerro1} = $l1;
}
close(FITX1);
open(FITX2, $fitxBi) ||
die(“Ezin $fitxBi fitxategia zabaldun”);
# $fitxBi lerroz-lerro zeharkatu eta
# lerro bakoitza %fitxHash-en aurrez
# existitzen den begiratu
while( $lerro2 = <FITX2> ) {
chomp($lerro2);
$l2++;
if( exists $fitxHash{$lerro2} ) {
# lerro errepikatua
print (“>$fitxBat $fitxHash{$lerro2}
lerroant$fitxBi $l2 lerroan:n”);
print (“$lerro2n”);
}
}
close(FITX2);
Jaitsi edukiKonp.pl fitxategia