Programm / Skript gesucht, das folgendes tut...



  • CStoll schrieb:

    Du könntest prog1 per man: popen starten und dann dessen Ausgaben zeilenweise lesen (fgets), vergleichen und bei Bedarf speichern. Wenn du damit durch bist, rufst du prog2 auf etc.

    Sowas würde ich auf keinen Fall mit C lösen, das ist als Shellscript maximal ein Dreizeiler.



  • grep müsste ich ja 3x starten (weil ich nach drei verschiedenen schlüsselbegriffen suche)

    und von shellskripten habe ich keine ahnung ...
    aber danke schonmal soweit !



  • Benja_m schrieb:

    grep müsste ich ja 3x starten (weil ich nach drei verschiedenen schlüsselbegriffen suche)

    Nein, grep kann ja auch mit RegExps suchen, probier zB mal folgendes:

    egrep "(foo|bar)"
    

    und von shellskripten habe ich keine ahnung ...

    Tja, allerhöchste Zeit, ein bisschen zu lesen:
    http://pegasus.rutgers.edu/~elflord/unix/bash-tute.html
    http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
    http://www.tldp.org/LDP/abs/html/



  • nman schrieb:

    CStoll schrieb:

    Du könntest prog1 per man: popen starten und dann dessen Ausgaben zeilenweise lesen (fgets), vergleichen und bei Bedarf speichern. Wenn du damit durch bist, rufst du prog2 auf etc.

    Sowas würde ich auf keinen Fall mit C lösen, das ist als Shellscript maximal ein Dreizeiler.

    Wenn du meinst 😉 Von Shell-Scripten habe ich leider keine Ahnung (ist das vergleichbar mit Batch-Programmierung?) - deshalb wäre ich wohl den umständlicheren Weg gegangen.



  • CStoll schrieb:

    Von Shell-Scripten habe ich leider keine Ahnung (ist das vergleichbar mit Batch-Programmierung?)

    Jap, nur etwas mächtiger.

    MfG

    GPC



  • oki, ich bin jetzt soweit, das ich mittels egrep genau die drei gesuchten Zeilen finden kann. Die sehen ungefähr so aus:

    5 .bss          00000860  10002160  10002160  00000000  2**4
    00400460 <t_run_test>:
    400c10:       02 00 00 00     jal 4022d0 <th_report_results>
    

    Was ich brauche sind die zweite und dritte Zahl der ersten Zeile (860 und 10002160)

    dann brauche ich die Zahl der zweiten Zeile und die letzte zahl (4022d0) der dritten Zeile

    erschwerend kommt hinzu, dass die zahlen hexadezimal sind.

    Da bin ich jetzt schon wieder überfragt 😞

    Wenn mir jemand einen kurzen Denkanstoß geben könnte ... ?

    Dankeschön !!!



  • CStoll: Viel, viel, viel, ... , viel mächtiger. 🙂

    Benja_m: Puh, ist das hässlich, kannst Du die Ausgabe nicht ein bisschen hübscher machen?

    Sonst musst Du nämlich mit etwas in der Art hier arbeiten (gawk):

    BEGIN {
        FS=" "
        RS="\n"
        ORS=""
    }
    
    {
        switch (FNR) {
            case 1:
                print $3, $4
                break
            case 2:
                print $1
                break
            case 3:
                print $7
                break
            default:
        }
        print "\n"
    }
    


  • nman schrieb:

    Benja_m: Puh, ist das hässlich, kannst Du die Ausgabe nicht ein bisschen hübscher machen?

    Nein, leider nicht 😞

    nman schrieb:

    Sonst musst Du nämlich mit etwas in der Art hier arbeiten (gawk):

    BEGIN {
        FS=" "
        RS="\n"
        ORS=""
    }
    
    {
        switch (FNR) {
            case 1:
                print $3, $4
                break
            case 2:
                print $1
                break
            case 3:
                print $7
                break
            default:
        }
        print "\n"
    }
    

    wofür steht "FNR" und wozu brauchst du FS, RS usw ?

    was bedeutet gawk ?

    *nerv* <- sorry dafür !

    Danke schonmal !





  • das is mir dann doch ne nummer zu hoch auf die schnelle.

    werde einfach einen systemcall auf egrep machen und die ausgabe davon mit std::getline() einlesen und in meinem c++-programm direkt auswerten.
    da weiß ich wie es geht.

    Danke !



  • Benja_m schrieb:

    das is mir dann doch ne nummer zu hoch auf die schnelle.

    Mein Code gibt einfach für die erste Zeile den dritten und vierten Wert aus, für die zweite Zeile den ersten und für die dritte Zeile den siebenten. FS ist der Field-Separator und RS der Record-Separator.

    werde einfach einen systemcall auf egrep machen und die ausgabe davon mit std::getline() einlesen und in meinem c++-programm direkt auswerten.
    da weiß ich wie es geht.

    Wenn Du das ohnehin zu Fuß implementierst, dann brauchst Du dafür eigentlich kein grep; schreib Dein Programm einfach als passenden Filter.

    Im Grunde sind alle Lösungen nicht optimal, aber das liegt vor allem an der hässlichen Ausgabe...



  • ma guckn was ich nu davon mache 😉

    das is das ausgabeformat von "objdump" - da kann ich nix dran machen 😞


Anmelden zum Antworten