Hallo an alle,
ich will den untenstehenden Inhalt einer Datei erst nach der ersten und dann nach der 6. Spalte sortieren, kann mir jemand auf die Schnelle sagen wie das funzt.
(Die Spalten sind mit einer undefinierten Zahl an Leerstellen getrennt)
IC71-1 SO14 MENI 901 8 5 GA
D65-1 SOD15 MENI 1 2 2 GA
IC14-1 SO16 LAND 15 2 5 GA
D17-1 MELF MENI 903 6 810 GA
IC14-1 SO16 LAND 2 2 5 GA
IC14-1 SO16 LAND 9 2 5 GA
IC69-1 SO-16L MENI 601 2 2 GA
R94-1 R0805 MENI 900 8 2 GA
IC14-1 SO16 LAND 12 2 5 GA
IC14-1 SO16 LAND 10 2 690 GA
D17-1 MELF MENI 900 20 5 GA
D14-1 SOD15 MENI 1 2 2 GA
R426-1 MINIMELF MENI 900 8 110 GA
D178-1 SOD15 MENI 1 2 2 GA
D138-1 SOD-80C LAND 1 2 380 GA
D142-1 SOD15 MENI 900 4a 2 GA
IC71-1 SO14 MENP 508 20 630 GA
IC14-1 SO16 MENP 506 20 5 GA
IC14-1 SO16 MENP 507 20 5 GA
IC14-1 SO16 MENP 508 20 5 GA
IC14-1 SO16 MENP 502 20 5 GA
IC11-1 SO16 MENP 501 10 390 GA
Wäre für jede Hilfe dankebar
Andreas
User since
2003-08-04
1706
Artikel
HausmeisterIn
So in Etwa:
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
my @in;
while (chomp(my $in = <DATA>)) {
push @in,[split /\s+/,$in];
}
for (sort {$a->[0] cmp $b->[0] or $a->[5] <=> $b->[5]} @in) {
print join(",\t",@$_),"\n";
}
_ _DATA_ _
IC71-1 SO14 MENI 901 8 5 GA
D65-1 SOD15 MENI 1 2 2 GA
IC14-1 SO16 LAND 15 2 5 GA
D17-1 MELF MENI 903 6 810 GA
IC14-1 SO16 LAND 2 2 5 GA
IC14-1 SO16 LAND 9 2 5 GA
IC69-1 SO-16L MENI 601 2 2 GA
R94-1 R0805 MENI 900 8 2 GA
IC14-1 SO16 LAND 12 2 5 GA
IC14-1 SO16 LAND 10 2 690 GA
D17-1 MELF MENI 900 20 5 GA
D14-1 SOD15 MENI 1 2 2 GA
R426-1 MINIMELF MENI 900 8 110 GA
D178-1 SOD15 MENI 1 2 2 GA
D138-1 SOD-80C LAND 1 2 380 GA
D142-1 SOD15 MENI 900 4a 2 GA
IC71-1 SO14 MENP 508 20 630 GA
IC14-1 SO16 MENP 506 20 5 GA
IC14-1 SO16 MENP 507 20 5 GA
IC14-1 SO16 MENP 508 20 5 GA
IC14-1 SO16 MENP 502 20 5 GA
IC11-1 SO16 MENP 501 10 390 GA
Gute Tutorials gibts auch auf der Privatseite von Crian :
http://links.perl-community.de/#Private_Perl_Seiten
Gruß Alex
User since
2003-08-04
5871
Artikel
ModeratorIn
Klar, schau Dir die Sort-Beispiele unter Snippets auf meiner Homepage an (Link ist in der Signatur). Da ist für einen entsprechenden Fall ein Snippet vorhanden.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2004-03-04
52
Artikel
BenutzerIn
my @sort = map { $_->[0] }
sort { $a->[1] cmp $b->[1] || $a->[6] <=> $b->[6] }
map { [$_, split / /,$_ ] } @array;
ich würds so machen.
steve
edit: dankean betterworld! cmp gegen <=> ersetzt\n\n
<!--EDIT|steve|1084644342-->
User since
2003-08-21
2614
Artikel
ModeratorIn
Achtung steve, cmp vergleicht alphabetisch, <=> numerisch!