bash: Ausgabe in einer Zeile
Klara
- programmiertechnik
0 Vinzenz Mai0 Klara
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
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
2ich möchte die Ausgabe jedoch wie folgt haben:
4.2.2gibt 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
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
2ich möchte die Ausgabe jedoch wie folgt haben:
4.2.2gibt 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
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