Klara: bash: Ausgabe in einer Zeile

Hi!

grep xyz ./datei.h |awk '{print $3}'

gibt folgendes aus:
4
2
2

ich möchte die Ausgabe jedoch wie folgt haben:
4.2.2

gibt es ein Kommando, welches mir die Ausgabe so zurück gibt?

OS: Debian Lenny

Klara

  1. Hallo

    grep xyz ./datei.h |awk '{print $3}'

    gibt folgendes aus:

    mit welchem Dateiinhalt? Warum fehlt der? Warum machst Du es potentiellen Helfern so schwer?

    4
    2
    2

    ich möchte die Ausgabe jedoch wie folgt haben:
    4.2.2

    gibt es ein Kommando, welches mir die Ausgabe so zurück gibt?

    pipe Deine Ausgabe durch tr, lasse den Zeilenumbruch durch einen Punkt ersetzen.
    Ersetze den Punkt am Ende durch einen Zeilenumbruch.

    Freundliche Grüße

    Vinzenz

    1. Hi

      grep xyz ./datei.h |awk '{print $3}'

      gibt folgendes aus:

      mit welchem Dateiinhalt? Warum fehlt der? Warum machst Du es potentiellen Helfern so schwer?

      ich hielt es für unnötig den kompletten Quelltext (81k) der Datei zu posten

      das ist eine .h Datei

      grep __GNU_MP_VERSION ./gmp.h
      #define __GNU_MP_VERSION 4
      #define __GNU_MP_VERSION_MINOR 2
      #define __GNU_MP_VERSION_PATCHLEVEL 2

      4
      2
      2

      ich möchte die Ausgabe jedoch wie folgt haben:
      4.2.2

      gibt es ein Kommando, welches mir die Ausgabe so zurück gibt?

      pipe Deine Ausgabe durch tr, lasse den Zeilenumbruch durch einen Punkt ersetzen.
      Ersetze den Punkt am Ende durch einen Zeilenumbruch.

      das mit \n in . habe ich hinbekommen
      im Moment scheiter ich am letzten "."

      Klara

      1. Hallo,

        grep xyz ./datei.h |awk '{print $3}'
        gibt folgendes aus:

        mit welchem Dateiinhalt? Warum fehlt der? Warum machst Du es potentiellen Helfern so schwer?
        ich hielt es für unnötig den kompletten Quelltext (81k) der Datei zu posten

        *seufz*
        Natürlich nicht, sondern eine Beispieldatei mit vier oder fünf Zeilen, so wie es sinngemäß in Tipps für Fragende steht. Hier im speziellen Fall bin ich nicht besonders vertraut mit awk. D.h. Du baust eine unnötige Hürde auf. Sicher kann dieses Problem auch auf die gleiche Weise gelöst werden, wenn man die Ausgabe von cat

        beispiel.h
        4
        2
        2

        ins gleiche Format bringt. Befriedigender ist es jedoch, die richtige Befehlsverkettung verwenden zu können. Ich habe mir die Mühe gemacht, in den man-pages nachzulesen, was awk da macht und mir eine passende Beispieldatei zusammengestellt. Diese Mühe hättest Du mir ersparen können. Das hätte Engagement Deinerseits gezeigt, was sich bei Fragen in Foren in aller Regel auszahlt.

        Du suchst ja auch nicht nach

        xyz

        und die Datei heißt auch nicht

        datei.h

        das ist eine .h Datei

        grep __GNU_MP_VERSION ./gmp.h
        #define __GNU_MP_VERSION 4
        #define __GNU_MP_VERSION_MINOR 2
        #define __GNU_MP_VERSION_PATCHLEVEL 2

        und Du suchst nach __GNU_MP_VERSION ;-)

        ich möchte die Ausgabe jedoch wie folgt haben:
        4.2.2

        gibt es ein Kommando, welches mir die Ausgabe so zurück gibt?

        Zurück zum Problem. Ein möglicher Weg, es zu lösen, geht über Kommandosubstitution mit Backticks oder $(befehlskette).

        Wenn Du die Kommandos, deren Ausgabe Du haben willst, _nicht_ in Anführungszeichen packst, dann hat dies den an dieser Stelle wünschenswerten Nebeneffekt, dass die Zeilenendenzeichen wegfallen.

        Schau' Dir die Ausgabe von

        echo $(grep __GNU_MP_VERSION /path/to/headerfile | awk '{print $3]')

        an. Du wirst feststellen, dass sie

        4 2 2

        lautet. Nun kannst Du ganz einfach die Ausgabe durch tr pipen und das Leerzeichen durch den Punkt ersetzen und bekommst somit das gewünschte Resultat:

        echo $(grep __GNU_MP_VERSION /path/to/headerfile | awk '{print $3]') | tr -s ' ' '.'
          4.2.2

        Freundliche Grüße

        Vinzenz, der auch wieder einiges dazugelernt hat