Eine Listen frage....
am 21.02.2006 14:34:36 von Alex
Hallo!
Was ich will ist - Spalten 4,2,3,.... und ab 10 den Rest ausgeben.....
das was ich hier alles ausprobiert habe geht soweit auch nur das mit
dem REST nicht.....
ps -aux | perl -ne 'chomp;print join(" ",((split " ")[4,2,3,9,10,$#_]))
.."\n"'
Das hier gibt für $#_ auch die letzte Spalte aus, -1 macht ja das
selbe - aber wenn ich denn das so abändere das ich 10..-1 oder 10..$#_
schreibe dann passiert nicht das was ich erwarte :-(((
Wo ist da der Denkfehler?
Danke & Gruß, Alex
Re: Eine Listen frage....
am 21.02.2006 14:46:46 von Christian Lackas
* Alex [2006-02-21]:
Hallo Alex,
> ps -aux | perl -ne 'chomp;print join(" ",((split " ")[4,2,3,9,10,$#_]))."\n"'
> Das hier gibt für $#_ auch die letzte Spalte aus, -1 macht ja das
> selbe - aber wenn ich denn das so abändere das ich 10..-1 oder 10..$#_
> schreibe dann passiert nicht das was ich erwarte :-(((
also bei mir tut es genau das was ich erwarte:
$ perl -wle '@_=(0,1,2,3,4,5,6); print @_[2,3,1,4..$#_]'
231456
Vielleicht erwartet du ja etwas anderes?
Mit -1 als Ziel des Rangeoperators kannst du allerdings nicht arbeiten.
Gruß
Christian
--
C isn't that hard: void (*(*f[])())() defines f as an array of
unspecified size, of pointers to functions that return pointers to
functions that return void.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker
Re: Eine Listen frage....
am 21.02.2006 14:48:49 von Peter Ehrenberg
"Alex" writes:
> Was ich will ist - Spalten 4,2,3,.... und ab 10 den Rest ausgeben.....
> [...]
War hier gerade dran: Dritter Parameter von split.
perldoc -f split
Peter
--
Dipl.-Ing. Peter Ehrenberg Tel.: +49 40 756604-40
Auf der Höhe 29 Netz: http://dipe.de/
21109 Hamburg Perl · Oracle · Linux · Netzwerk
Germany Softwareentwicklung · Installation · Administration
Re: Eine Listen frage....
am 21.02.2006 15:03:12 von Alex
Hallo Peter!
Da ich kein Linit haben will und nicht weiß ob bei dem Split 10 oder
12 oder 20 Teile folgen (weil bei ps -aux die Ausgabelänge ja auch
abhängig von den Programmen und deren Aufrufparametern ist), wollte
ich einfach sagen ab 10 bis ENDE....
Re: Eine Listen frage....
am 21.02.2006 15:23:31 von Alex
Hi!
Ok, hab mein Fehler gefunden.... das $#_ also auf das Referenzierte
"virtuelle" Array geht nicht... wenn ich es so mache, macht es das was
ich will:
ps -aux |perl -ne 'chomp; @temp =3D split " "; print join(" ",
@temp[4,2,3,9,10..$#temp]) ."\n" '
Danke, Gruß, Alex
Re: Eine Listen frage....
am 21.02.2006 18:32:18 von Bernd Schuler
Alex schrieb:
> Hallo Peter!
>
> Da ich kein Linit haben will und nicht weiß ob bei dem Split 10 oder
> 12 oder 20 Teile folgen (weil bei ps -aux die Ausgabelänge ja auch
> abhängig von den Programmen und deren Aufrufparametern ist), wollte
> ich einfach sagen ab 10 bis ENDE....
>
Nutzung des dritten Parameters von split() in dieser Weise
ps -aux | perl -ne 'print join(" ",(split(" ",$_,11))[4,3,2,9,10] )'
erreicht das Gewünschte (umgeht jedoch das Thema Deiner Frage).
Re: Eine Listen frage....
am 21.02.2006 20:05:00 von Alex
Am 21.02.06 um 18:32 schrieb *Bernd* folgendes:
> Nutzung des dritten Parameters von split() in dieser Weise
> ps -aux | perl -ne 'print join(" ",(split(" ",$_,11))[4,3,2,9,10] )'
> erreicht das Gewünschte (umgeht jedoch das Thema Deiner Frage).
Ok, danke - das habe ich jetzt doch richtig verstanden - LIMIT hackt nicht
ab sonderen es begrenzt nur die Übergebenden Anzahl der Listenmittglieder.
Ich hatte es erst so verstanden das es einfach abhangt nach dem x-ten
Treffer....
Ok, aber zu meiner anfänglichen Frage: Kann man auf ein virtuelles Array
das $#_ (count auf das Array/Liste) nicht anwenden?
Danke & Gruß,
Alex
--
*Alex* - die *zarteste* Versuchung seit es Schokolade gibt!
Re: Eine Listen frage....
am 21.02.2006 20:29:45 von Frank Seitz
Alexander Palm wrote:
> Ok, aber zu meiner anfänglichen Frage: Kann man auf ein virtuelles Array
> das $#_ (count auf das Array/Liste) nicht anwenden?
Du verwendest eine Begrifflichkeit ("virtuelles Array"), die in Perl
nicht existiert. @_ ist die Liste, in der Perl die aktuellen
Aufrufargumente einer Subroutine speichert. Diese ist nur
in einer Subroutine vorhanden. Dort ist dann auch $#_ definiert
(was übrigens nicht die Anzahl der Elemente ist, sondern der
letzte Index, also um 1 kleiner).
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Eine Listen frage....
am 22.02.2006 00:13:00 von Alex
Am 21.02.06 um 20:29 schrieb *Frank* folgendes:
>> Ok, aber zu meiner anfänglichen Frage: Kann man auf ein virtuelles Array
>> das $#_ (count auf das Array/Liste) nicht anwenden?
Hallo Frank!
> Du verwendest eine Begrifflichkeit ("virtuelles Array"), die in Perl
> nicht existiert. @_ ist die Liste, in der Perl die aktuellen
> Aufrufargumente einer Subroutine speichert. Diese ist nur
> in einer Subroutine vorhanden. Dort ist dann auch $#_ definiert
> (was übrigens nicht die Anzahl der Elemente ist, sondern der
> letzte Index, also um 1 kleiner).
Hmmm - dann habe ich das in dem Kochbuch wohl falsch in Erinnerung oder -
ich meine das die da von virtuellen Arrays sprechen beim Referenzieren als
ein Hash....
z.B.:
@{$hash{$id}}
Aber ich sehe gerade die nennen das da nicht virutell sondern anonym...
sorry.... :-( Ich denke ich muß das Buch mehrmals lesen.... aber so viel
auf einmal aufnehmen ist auch nicht einfach. :-)
danke & Gruß, Alex
--
*Alex* - die *zarteste* Versuchung seit es Schokolade gibt!