Variablen in einer Log-Datei sollen exakt untereinander stehen

chats

Benutzer
Registriert
29. Sep. 2012
Beiträge
571
Reaktionspunkte
12
Punkte
38
Hallo zusammen,
ich bin an einer Logdatei zugange wo ich Variablen reinschreibe.

05-03-25 09-15-01 1741162501 1741162511 10 10.0 Watt/std 80
05-03-25 08-35-01 1741160101 1741160111 10 8.11 Watt/std 64.88

Hier kann man erkennen das die Werte nicht exakt untereinander stehen. Die Informationen selber stimmen und es ist für mich nur eine Kür die LogDatei schön zu machen.
Also hätte ich hätte die Werte gerne untereinander stehen.
Die erste Hürde wird wohl sein das manchmal ein Punkt vorhanden ist und manchmal eine oder zwei stellen vor dem Punkt bzw. Komma.
Vielleicht kann da mal jemand was zu schreiben.
Wie geschrieben nur die Kür, mehr nicht.

Edit: Ich habe den Post abgeschickt und da steht es untereinander. Aber in der Logdatei selber nicht.
 
Edit: Ich habe den Post abgeschickt und da steht es untereinander. Aber in der Logdatei selber nicht
Dann stehen da wohl Tabs die mit deinem Anzeigetool nicht expandiert werden. Mit dem Tool
Code:
expand
kannst Du Tabs durch Spaces ersetzen und dann sollte alles passen.
 
  • Like
Reaktionen: DaveR
Du schreibst nicht, wie Du die Daten in die Log-Datei reinschreibst. Sofern Du das mit einem Shell-Skript machst, kannst Du das Kommando printf (in einem bash-Skript) nutzen, um die Ausgabe zu formatieren.

Hier ein Beispiel - das kleine Skript:
Bash:
#!/bin/bash

printf "Ersatzteil fuer: %-10s Preis: %8.2f\n" "Trabi" ".99"
printf "Ersatzteil fuer: %-10s Preis: %8.2f\n" "VW" "12.34"
printf "Ersatzteil fuer: %-10s Preis: %8.2f\n" "Mercedes" "1234.98"
ergibt folgende formatierte Ausgabe:
Bash:
Ersatzteil fuer: Trabi      Preis:     0.99
Ersatzteil fuer: VW         Preis:    12.34
Ersatzteil fuer: Mercedes   Preis:  1234.98
Im ersten String gibst Du Text und Formatanweisungen an, mit denen die beiden nachfolgenden Strings ausgegeben werden (Hinweis: die Anzahl der Strings nach dem ersten muss mit der Zahl der Formatanweisungen im ersten String übereinstimmen):
  • "%-10s": gibt den zweiten String (hier den Autonamen) 10-stellig, linksbündig aus. Willst Du den String rechtsbündig ausgeben, dann lautet die Formatanweisung "%10s".
  • "%8.2f" gibt den dritten String (hier den Preis) als 8-stellige Fließkommazahl mit 2 Dezimalstellen rechtsbündig aus.
  • "\n" wird für den Zeilenvorschub benötigt.
Statt der Strings aus dem Beispiel kannst Du selbstverständlich auch Variablen verwenden, die Du ausgeben möchtest. Einfach ausprobieren und ein wenig rumspielen bis es passt.

Weitergehende Infos zu printf gibt es auf zahlreichen Seiten im Netz, wie z.B. hier: Klick mich.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: DaveR
Etwas trivialer aber dafür ohne formatireung mit echo -e möglich. Als Tab einfach \t verwenden.
Bash:
echo -e "05-03-25\t09-15-01\t1741162501\t1741162511\t10\t10.0\tWatt/std\t80"
echo -e "05-03-25\t08-35-01\t1741160101\t1741160111\t10\t8.11\tWatt/std\t64.88"

Ergibt:
Code:
05-03-25        09-15-01        1741162501      1741162511      10      10.0    Watt/std        80
05-03-25        08-35-01        1741160101      1741160111      10      8.11    Watt/std        64.88
 
Ja, damit erreichst Du, dass in jeder ausgegebenen Zeile jede Spalte an der gleichen Position beginnt.

Allerdings hat Deine Lösung zwei Nachteile: Zum einen ist die Angabe der Einheit "Watt/Std" bei Spalte 6 recht weit weg von den Werten, und zum anderen werden in Spalte 6 und 7 die Dezimalstellen nicht wie vom TE gewünscht ausgegeben, sprich die Werte der Fließkommazahlen sind nicht ausgerichtet. Außerdem, aber das ist nur mein rein persönlicher Geschmack, mag ich keine Steuerzeichen (so auch Tabs) in Logdateien, denn es kann es bei einer möglichen Weiterverarbeitung zu Problemen kommen. Aber darüber streiten sich bereits Generationen von Entwicklern... :cool:

Wenn die Ausgabe der Daten für das Logfile in einem Skript erfolgt, das die Variablen $col1 bis $col7 nutzt, dann könnte das printf-Kommando z.B. wie folgt aussehen
Bash:
printf "%8s %8s %10d %10d %2d %5.2f Watt/Std %5.2f\n" $col1 $col2 $col3 $col4 $col5 $col6 $col7
und folgende Ausgabe erzeugen:
Code:
05-03-25 09-15-01 1741162501 1741162511 10 10.00 Watt/Std 80.00
05-03-25 08-35-01 1741160101 1741160111 10  8.11 Watt/Std 64.88
05-03-25 07-35-01 1741160657 1741160849 10  0.11 Watt/Std  4.45
Und so habe ich den TE verstanden, möchte er es gerne haben.
 
  • Like
Reaktionen: DaveR
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat