Filtern von showrev -p

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von likwitt, 25.10.2006.

  1. #1 likwitt, 25.10.2006
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Hallo zusammen,

    auf der suche nach einer Lösung meines (kleinen) Problems bin ich auf dieses Forum gestossen und bin mir sicher das mir hier jemand weiterhelfen kann!
    (zuvor noch ein grüßendes "hallo" an alle und bin von dem Forum positiv überrascht!)

    Nun zu meinem Anliegen.
    Ich möchte auf einem Solaris System alle Patche auflisten.
    Dies gelingt auch mit dem Befehl
    showrev -p
    mit der Ausgabe
    ....
    Patch: 119766-02 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
    Patch: 120294-01 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
    Patch: 120704-01 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
    .....
    Ich würde jedoch nur folgende Ausgabe benötigen:
    Patch: 119766-02
    Patch: 120294-01
    Patch: 120704-01... ...

    Wie kann ich das filtern?
    Mit grep nach Patch ...und dann weiß ich jedoch nicht wie ich den Rest "wegschneide".
    Vielleicht hat hier ja jemand nen Tipp.
    thx im vorraus.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hast Du unter Solaris cut? Dann geht vielleicht

    Code:
    showrev -p | cut -f1,2 -d" "
    
    Für den Syntax schau Dir man cut an.

    Gruss, Xanti
     
  4. #3 likwitt, 25.10.2006
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    4 Minuten!!
    und dann klappts auch noch :-)!
    thx!!
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Mist, es klappt. ;)

    Hab mir noch andere Möglichkeiten überlegt (da ich mich mit Solaris nicht so auskenne), die ich der Vollständigkeit halber trotzdem angebe:

    Code:
    ... | awk '{print $1, $2}'
    ... | sed 's/^\([^ ]* [^ ]*\).*/\1/'
    
    Gruss, Xanti
     
  6. #5 Schlaubi_fi.de, 25.10.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Perl hast Du vergessen Xantüüüü :D
     
  7. #6 likwitt, 25.10.2006
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    danke:-)
    zur Vollständigkeit dann noch soviel ;-)
    ... | awk '{print $1, $2}' klappt nicht bei langen Zeilen
    *** record `Patch: 118833-17 Obs...' has too many fields ***
    ... | sed 's/^\([^ ]* [^ ]*\).*/\1/' dagegen sieht wieder gut aus!!!

    kann mich nur nochmals für die fixe Antwort bedanken.
    Nun besteht natürlich die Gefahr das ich mich des öfteren hier mit sowas melde:-)!
    (könnt ja gleich fragen wie ich das ganze dann nach Nummern listen kann ;-) )
     
  8. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Nagut :D

    Code:
    ... | perl -nae 'print "$F[0] $F[1]\n"'
    
    @ likwitt: Was meinst Du mit listen? Etwa sortieren? Etwas genauer schildern, damit man Dir helfen kann!

    Gruss, Xanti
     
  9. #8 likwitt, 25.10.2006
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    zum einenmal wäre es sortieren.
    Das andere wäre eine Art Spalten.
    Mit Spalten meine ich die Ausgabe.
    Momentan sieht diese ja folgendermassen aus.
    Patch: 120739-02
    Patch: 122208-01
    Patch: 119890-03
    Patch: 120288-02
    Patch: 120286-02
    Patch: 119262-03
    ...

    und ist ziemlich lang.
    Wünschenswärt wäre sowas in der Art
    Patch: 120739-02 <TAB> Patch: 119890-03 <TAB> Patch: 120286-02
    Patch: 122208-01 <TAB> Patch: 120288-02 <TAB> Patch: 119262-03


    Somit hätte ich mehrere Spalten und die Liste wäre nicht endlos lang.
     
  10. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Nicht optimal, aber probier mal folgendes:

    Code:
    ... | sort | perl -nae 'INIT{$i=0} print "$F[0] $F[1]"; if($i++==2) {print "\n"; $i=0} else {print "\t"} END{print "\n"}'
    Gruss, Xanti
     
  11. #10 Wolfgang, 25.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Mein Vorschlag in Perl will ich auch noch zum Besten geben.
    Hab ja lange keine Gelegenheit mehr gehabt gelle.;)
    Code:
    perl -ane '$sp=3;(($.%$sp)==0)?print:do{chomp;print "$_\t"};END{print"\n" if($.%$sp>0)}' temp/testei
    
    testei ist hier die Eingabe statt der Pipe.
    $sp ist die Anzahl der Spalten.
    Wenn dir ein Newline am Ende doppelt oder fehlend egal ist, kannst du den ganzen ENDE Kram weglassen.

    Aber wenn man schon Perl nimmt, könnte man gleich alles damit machen.:D

    Gruß Wolfgang
     
  12. #11 Schlaubi_fi.de, 26.10.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Das kommt jetzt darauf an, welchen awk Du verwendst - ist das auch der GNU-Awk? (meistens unter /usr/local/bin/awk unter Solaris zu finden)

    @ Xantü, Wolle - subbi :-)
     
  13. #12 likwitt, 26.10.2006
    Zuletzt bearbeitet: 26.10.2006
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Welches awk das ist kann ich nicht sagen - Standard Solaris installation. (awk in /usr/bin ist irgendwie nicht richtig zu lesen)
    Da es auf verschiedenen Solarisworkstation lauffähig sein sollte wären reine shell Befehle das Beste.

    Aber die Lösung habt ihr mir ja schon geliefert - thx nochmals!

    zur vollständigkeit noch dieses.
    ... | sort | perl -nae 'INIT{$i=0} print "$F[0] $F[1]"; if($i++==2) {print "\n"; $i=0} else {print "\t"} END{print "\n"}'
    klappt bestens und zeigt mir das ganze in 3 Spalten. Werde noch herausfinden wie ich x-Spalten daraus bekomme - und was die einzelnen Sachen so machen:-)!

    Die 2te Perllösung scheint nicht ganz so zu funktionieren
    perl -ane '$sp=3;(($.%$sp)==0)?print:do{chomp;print "$_\t"};END{print"\n" if($.%$sp>0)}' temp/testei

    habe showrev -p in eine Testdatei umgeleitet und diese dann für temp/testtei angegeben. Da "filtert" er jedoch leider nicht.


    Meine Momentane Lösung geht jedoch von Perl weg (kann nicht wissen ob auf allen rechnern Perl korrekt installiert ist / Pfad usw.) und sieht folgendermassen aus:

    showrev -p |cut -d" " -f1,2 | sort | awk '/^[a-zA-Z]/{h=$0} /^[a-zA-Z]/ {print h,","$0}'

    hier versuche ich jedoch noch mehrere Spalten zu haben (mind. 4) und vielleicht mit TAB noch übersichtlicher zu machen.
    Hat noch nicht ganz geklappt;-)
     
  14. #13 Wolfgang, 26.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Meine Lösung funktioniert unter *nixsystemen ohne Probleme:
    Könnte es sein, dass deine Datei \r enthält?
    Dann geht das natürlich nicht.
    chomp entfernt das Newline der Eingabe.
    Falls das dein Problem ist, kannst du die daten ja vorher durch tr -d "\r" schieben.
    Aber auch Xanties Lösung lässt sich umbauen.
    Dafür musst du nur den Vergleich if($i++==2) auf die gewünschte Spaltenzahl setzen.

    Gruß Wolfgang
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hallo Wolfgang,

    ich vermute mal, likwitt wendet Deinen Befehl auf den Ausgangsstream an:

    Code:
    Patch: 119766-02 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
    Patch: 120294-01 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
    Patch: 120704-01 Obsoletes: Requires: Incompatibles: Packages: SUNWsfman
    
    Gruss, Xanti
     
  17. #15 likwitt, 26.10.2006
    Zuletzt bearbeitet: 26.10.2006
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    sorry, hatte wohl zur gleichen Zeit meinen Letzten Beitrag editiert!

    Wie dort erwähnt versuche ich von der Perl Lösung abstand zu halten und Probiere es mit
    showrev -p |cut -d" " -f1,2 | sort | awk '/^[a-zA-Z]/{h=$0} /^[a-zA-Z]/ {print h,","$0}'
    um suícherzustellen das ich das auf allen Rechnern Problemlos durchführen kann.
    Momentanes Problem habe ich das ich nur zwei Spalten bekomme (benötige mind. 4) und versuche noch mehr übersichtlichkeit (tabs) reinzubekommen.Vielleicht hat da jemand eine Idee?


    und xanti hatte recht - hatte den Ausgangststream verwendet.
     
Thema:

Filtern von showrev -p

Die Seite wird geladen...

Filtern von showrev -p - Ähnliche Themen

  1. Umlaute Filtern

    Umlaute Filtern: Hi zusammen, bin recht neu was UNIX Skripten angeht und hänge gerade bei etwas fest. Ich möchte eine Datei erstellen in welche ein Befehl kommt....
  2. Artikel: E-Mails filtern mit KMail

    Artikel: E-Mails filtern mit KMail: Fast alle E-Mail-Programme bieten einen Filtermechanismus an. In diesem Artikel wird die Anwendung des Filtermechanismus von KMail erläutert....
  3. FFmpeg 2.0 mit OpenCL und vielen neuen Filtern

    FFmpeg 2.0 mit OpenCL und vielen neuen Filtern: Das FFmpeg-Projekt hat sein Multimedia-Framework in der Version 2.0 veröffentlicht. FFmpeg ermöglicht es Anwendern, nahezu alle Multimediaformate...
  4. Filtern und zuordnen

    Filtern und zuordnen: Hallo, ich muss eine Eingabe filtern und zuordnen zB.: man gibt ein ---------- # /tmp/script 123.alpha 321.beta beta-blabla test test:alpha...
  5. String filtern

    String filtern: Moin, ich habe mich mal wieder rangesetzt und versucht ein bisschen C++ zu machen. In meinem Programm möchte ich eine Website laden und dann...