Doppelte Einträge in einer Datei


chill0r55555

Mitglied
Hallo Leute,
ich hab ein Problem mit doppelten Einträgen in einer Datei.
Undzwar ist die Datei so aufgebaut:

klaus:74
markus:99
reiner:01
falko:83
klaus:74

(Doppelpunkt ist das Trennzeichen)

Ich will nun die Datei einlesen, alle Werte in nem Array speichern. Kommen
nun Namen doppelt vor sollen diese gelöscht werden. Ich brauch auch jeweils nur
bis zum Doppelpunkt einlesen, da ich nur die Namen brauche. Ich komm mit dem
filtern halt nicht zurecht.

Das Skript kann bisher nur die Datei lesen und alle User ausgeben.

Code:
#!/usr/bin/perl -w 
  
  use strict;
  
	my $whitelist ="/etc/whitelist";  
        my $datei;
	my %user;  

	open ($datei, '<', $whitelist) or die $!;
	print "Read white\n";
	
	while(<$datei>)
	{
	   chomp;
	   my @array = split(/:/, $_);
	   $user{$array[0]} = 1;
	}
	close $datei;
	foreach (keys %user) 
	{	
		if ($user{$_} == 1)
		{
		# Testausgabe aller User
		print $_;
		}
	}
MfG


EDIT:
Ich hab im Prinzip das richtige schon gehabt *peinlich*. Ich habe es nun mal in das eigentlich Skript gepackt. Falls es jemanden interessiert hier die Lösung:
Code:
	# Whitelist vorhanden?
	if (-e $whitelist){
		# Erstelle Backup von Whitelist
		system ("cp ".$whitelist." ".$whitelist.$endung);
		# Lese Whitelist auf einen Hash ein, nur die Keys. 
		open ($datei, '<', $whitelist) or die $!;
		print "Read whitelist...\n";
		while(<$datei>)
		{
		   chomp;
		   my @array = split(/:/, $_);
		   $user{$array[0]} = 1;
		}
		close $datei;
		# Loesche vorhandene Whitelist
		system ("rm ".$whitelist);
		# Erstelle neue Whitelist
		open(my $filehandle,'>',$whitelist) or die $!;
		close $filehandle;
		foreach (keys %user) 
		{	
			if ($user{$_} == 1)
			{
				# Hash, nur die Keys, in neue Whitelist schreiben. Keine Dupletten vorhanden!
				system ("echo '".$_.":' >> ".$whitelist);
			}
		}
		#for ($i=0;$i<@users;$i++){
		#	system ("echo '".$users[$i].":' >> ".$whitelist);
		#}
		system ("echo '".$user.":' >> ".$whitelist);
	}
Als ist das Thema beendet. Man kann aber auch auf dem Schlauch stehen :roll:
 
Zuletzt bearbeitet: