perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 03:47

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitraggroße Datei sortieren
Seitenanfang
Hallo,

hab folgendes Problem.

Ich habe eine Datei, die sehr groß werden kann. Aus dieser Datei sollen doppelte Zeilen gelöscht werden. Die Gleichheit häng "nur" von dem Wert in der ersten Spalte ab. Nur die Zeile die weiter unten in der Datei steht soll erhalten werden.

z.B

ABC1 ABC2 ABC3
1 1 2
2 2 4
3 2 1
2 1 1
1 0

(getrennt durch TAB's oder leerzeichen)
In der erste Spalte ist immer ein Wert vorhanden! In den anderen ist das nicht immer so und darf auch keine Rolle spielen. Ebenso muss die Formatierung beibehalten werden, das die Datei später weiterverarbeitet wird.

Die Ausgabedatei sollte so aussehen:

ABC1 ABC2 ABC3
1 0
2 1 1
3 2 1

Das Perlskript sollte möglichst schnell laufen und das System nicht zu stark belasten. Die Datei kann mehere tausende Zeilen beinhalten.

Hoffe ihr könnt mir helfen.

Gruß

Datum: 20.10.2006-12:54

Beitragre: große Datei sortieren
Seitenanfang
ungetestet:
#!/usr/bin/perl

use strict;
use warnings;
use Tie::File;

my $file = '/path/to/big.file';
my $target_file = '/path/to/target.file';
my %hash;

tie my @array,'Tie::File',$file or die $!;
for(1..scalar(@array)-1){
my ($nr) = (split /\s+/,$array[$_])[0];
$hash{$nr} = $_;
}

open(my $fh,'>',$target_file) or die $!;
print $fh $array[0];
for(sort{$a <=> $b}keys %hash){
print $fh $array[$hash{$_}];
}
close $fh or die $!;

untie @array;

Datum: 20.10.2006-13:53

-






-
-