![]() |
|< 1 2 >| | ![]() |
17 Einträge, 2 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @folks = qw(Hans Maria Jochen Hans Maria Johann Hans Rainer);
my %seen;
for (0 .. $#folks) {
$seen{$folks[$_]}->{cnt}++;
push @{$seen{$folks[$_]}->{position}}, $_;
}
print Dumper \%seen;
my @unique = map { { $_ => $seen{$_} } } grep { $seen{$_}->{cnt} == 1 } keys %seen;
my @often = map { { $_ => $seen{$_} } } grep { $seen{$_}->{cnt} > 1 } keys %seen;
print Dumper \@unique, \@often;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/perl
use strict;
use warnings 'all';
use Data::Dumper;
# NAME: sortieren()
# USE: Array nach dem angegebenen Algorithmus sortieren.
# PARAMETER: 1. Ausgangsarray
# 2. Gleich-Array
# 3. Ungleich-Array
# RETURNS: Koordinaten-Hash ( Referenz )
sub sortieren(\@\@\@)
{
# parameter holen
my($start, $gleich, $ungleich) = @_;
my $coords = {};
# ausgangsarray abarbeiten
while (@{$start})
{
# quellelement holen
my $quell = $start->[0];
# coordinaten array anlegen
my $co = $coords->{$quell} = [];
# nach gleichen elementen suchen
for my$j ($[..$#{$start})
{ push(@{$co}, $j) if $start->[$j] eq $quell }
# haben wir mehrere gleiche elemente?
if (@{$co} > 1)
{
# nach gleich kopieren
push(@{$gleich}, @{$start}[@{$co}]);
}
# quelle nach ungleich kopieren
push(@{$ungleich}, $quell);
# quellelement und duplikate aus dem start array loeschen
foreach my$ele (sort { $b <=> $a } @{$co})
{ splice(@{$start}, $ele, 1) }
}
# koordinaten der jeweiligen quellelemente zurueckgeben
return $coords;
} # sortieren
# Ausgangsarray initialisieren
my @arr = qw(Hans Maria Jochen Hans Maria Johann Hans Rainer);
# die beiden Arrays zum speichern der Werte definieren
my @gleich;
my @ungleich;
# sortieren
my $coords = sortieren(@arr, @gleich, @ungleich);
# ausgeben
print Dumper(\@arr, \@gleich, \@ungleich, $coords);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
while(@satz)
{
my $quellelement=$satz[0]; #Erstes Element Satz nur für den späteren Vergleich nötig
my $quelldatei=$datei[0]; #jeweils erste Datei
push(@ungleich,$quelldatei);#Die Quelldatei wird in ungleich gespeichert
for my $pos($satz[1]..$#satz) #vom jeweils zweiten Element bis zum letzten
{
if ($quellelement eq $satz[$pos]) #Wenn erstes Element nochmals vorkommt
{
if ($counter==0) #Prüfe ob das Quellelement schon bearbeitet wurde
{
push(@gleich,$quelldatei); #Kopiere einmalig das jeweils erste Element in gleich
push(@Index,0); #Merk dir den Index
$counter++; #Zähler ist nun 1 somit wird die Schleife erstmal verlassen
}
push(@gleich,$datei[$pos]); #Speichere nun die anderen Werte in gleich
push(@Index,$pos); #und deren Position
}
}
$counter=0;
foreach my $element(@Index) #Löschen der nun schon verarbeiteter Indizes
{
splice @datei,$element,1;
splice @satz,$element,1;
}
@Index=(); #Neuinitialisierung von Index
}
system ("cp -v @gleich ./doppelt"); #Kopiere alle Dateien die identischen Inhalt haben
system("cp -v @ungleich ./einfach"); #Kopiere alle einfach vorkommenden Dateien
![]() |
|< 1 2 >| | ![]() |
17 Einträge, 2 Seiten |