Hallo,
Ich habe mit einem selbstgeschriebenem Skript RSSI Werte protokolliert. Jeder Eintrag beginnt mit der Jahreszahl 2024 und sollte in einer eigenen Zeile in der Logdatei stehen.
Leider war dieses Skript aus irgendwelchen Gründen fehlerhaft, die Folge ist das oft mehrere Logvorgänge in einer Zeile stehen.
Das Ganze sieht jetzt in etwa so aus (Auszug):
Ich habe folgendes probiert, das hat allerdings nicht funktioniert:
#!/bin/bash
# Pfad zur Logdatei
LOGFILE="rssi_17_02_2024.log"
# Temporäre Datei für die Bearbeitung erstellen
TMPFILE=$(mktemp)
# Durch die Logdatei iterieren
while IFS= read -r line; do
# Prüfen, ob die Zeile die Jahreszahl "2024" enthält
if [[ $line == *" 2024"* ]]; then
# Neue Zeile mit gewünschtem Text einfügen
echo >> "$TMPFILE"
fi
# Zeile aus der Logdatei in die temporäre Datei schreiben
echo "$line" >> "$TMPFILE"
done < "$LOGFILE"
# Temporäre Datei in die ursprüngliche Logdatei kopieren
mv "$TMPFILE" "rssi_korrigiert.log"
echo "Bearbeitung abgeschlossen!"
Auch wenn ich zu spät bin, aber ich liebe sed für sowas.
Schnell und schmutzig sieht das so aus:
$ sed -e’s/2024-/\n$1/g’ rssi_17_02_2024.log | sed -e ‘/^$/d’ > rssi_korrigiert.log
Der erste Ausdruck sucht durch das “g” am Ende des ersten Ausdrucks überall nach “2024-”, weil damit deine Ausgaben scheinbar immer anfangen.
Und ersetzt das “2024-” mit \n und dem Match-Pattern $1, macht also einen Zeilenumbruch vor das 2024-. Statt $1 könntest du auch einfach nochmal “2024-” hinter das \n schreiben.
Das ganze wird dann nochmal durch sed gepiped, um im zweiten Schritt die Leerzeilen (bestehend aus Zeilenbeginn und Zeilenende direkt hintereinander) zu entfernen.
Geht sicher auch noch schöner, aber als kleiner Einzeiler reicht es mir
Hab ich versucht mit 2x -e in einem Kommando, aber die Leerzeilen tauchen ja erst nach dem ersten Ersetzen, also durch das erste -e auf. Da scheint das zweite -e nicht mehr zu greifen.
Und ich hab einen Fehler drin. Es muss nicht $1, sondern &1 sein:
$ sed -e ‘s/2024-/\n&1/g’ rssi_17_02_2024.log | sed -e ‘/^$/d’ > rssi_korrigiert.log