Bonjour,
Je souhaite agréger (regourper) les lignes ayant des valeurs identiques
- Sur les champs 6, 7, 8
- Puis réaliser la Somme sur le champ 24
- Sur une volumétrie de lignes > 1 Millions
J'ai essayé quelque chose, mais ça ne fonctionne pas. Le split semble bien fonctionner, mais aucun regroupement n'est fait
Le fichier d'entrée (fichier TEXT de longueur fixe)
Mon Code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 57 55 3 4290281 508 101 209 202 0 10001 7 629 102 0 24 25 3455 0 0 0 1782 0 0 0 1200 AUG 31 2012 11:41AM 57 55 3 4261131 508 101 209 202 0 10000 7 629 102 0 24 25 2574 0 0 0 7777 0 50679 0 4934 AUG 31 2012 11:41AM 57 55 3 4642611 508 101 209 201 0 10000 7 629 102 0 24 25 3455 0 0 0 8924 0 50677 0 400 AUG 31 2012 11:41AM 57 55 3 4991920 508 100 209 202 0 10001 7 629 102 0 24 25 5811 0 0 0 2896 0 0 0 10266 AUG 31 2012 11:41AM
Le résultat que ça me donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #!/usr/bin/perl use strict; use warnings; use Tie::File; my (@file, @result); open(IN, "test.txt") || die "E/S : $!"; while(<IN>){ my $tmp = substr($_, 3); push(@file, $tmp); } while(@file){ my $line = $file[0]; my @line= split (/\s+/,$line); my $somme_montant = $line[24]; shift(@file); my $i = 0; foreach (@file){ if($_ =~ /$line[5] $line[6] $line[7](\d+)/){ $somme_montant = $somme_montant + $1; splice(@file, $i, 1); } $i++ } my $newLine = "$line[5] $line[6] $line[7] $somme_montant $i"; push(@result, $newLine); } close(IN); open(OUT, ">out") || die "E/S : $!"; foreach (@result){ print OUT $_."\n"; } close(OUT);
En Perl v5.10.1, sur SunOS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 101 209 202 1200 3 101 209 202 4934 2 101 209 201 400 1 100 209 202 10266 0
A l'aide
Partager