racer1601
Goto Top

Ubuntu Zeilen Löschen aus .txt Datei

Hallo

ich habe hier noch ein Problem mit dem auslesen und löschen von Zeilen in einem Logfile

Zum Problem:

Die zeilen Anzahl des Logfiles BachupLog.txt (Der Schreibfehler ist richtig so) soll eingelesen werden und auf eine länge von 150 Zeilen gekürst werden wenn er länger ist als 150 Zeilen.
Die Shell geht bis zum punkt: zeilen_gesamt=$(sed -n '$=' $LOG) und wertet diese auch aus aber dann bricht das Programm ab. Habe schon eine weile rum probiert aber komme nicht auf den Fehler. Unter dem CODE hänge ich mal Bilder an.

Hier mal eine test shell:
#!/bin/bash -x
# Sicherungsscript.sh
#*****************************************#
#***           BackupScript            ***#
#***            00.03.2012             ***#
#***       V.0.1Linux A. Schmidt       ***#
#*****************************************#
DATE=$(date +%Y.%m.%d)
TIME=$(date +%H:%M)
#Variable DATE und TIME erstellen
#######################################################
LOG=/home/administrator/BachupLog1.txt
zeilen_max=150
zeilen_gesamt=$(sed -n '$=' $LOG)  


bis hier kommt die shell wenn ich es laufen lasse dann kommt fehler in Zeile 97 und er hat dann auch nichts getan.

if [ $zeilen_gesamt -gt 150 ];
    then
         echo "#################hinter if###############" >> $LOG  
         let zeilen_loeschen=$zeilen_gesamt-$zeilen_max
         sed -i "1,${zeilen_loeschen}d" $LOG  
         echo "#############Prüfung der Länge wurde durchgeführt############ >> $LOG  
fi
#####################################################

Ich hoffe es kann mir jemand helfen!

1847732db470e5d196cc74d3d698b757

d2ad641d02be37dd35a12849ef3c498c

Content-Key: 182560

Url: https://administrator.de/contentid/182560

Printed on: April 23, 2024 at 13:04 o'clock

Member: bastla
bastla Mar 25, 2012 at 16:27:58 (UTC)
Goto Top
Hallo racer1601!

Wäre nicht eher "head tail" das, was Du suchst?

Grüße
bastla
Mitglied: 64748
64748 Mar 25, 2012 at 17:52:36 (UTC)
Goto Top
Hallo auch in diesem Thread zum ähnlichen Thema face-wink

Vielleicht ist sed ein bisschen zu kompliziert für solch einfachen Dinge.

Zeilenzahl der Datei
lines=`wc -l $LOG | cut -d " " -f 1` 
zu löschende Zeilen (Anzahl)
linestodelete=`expr $lines - 150`
und dann sollte Dein Code für sed eigentlich funktionieren
sed -i "1,$linestodelete d" $LOG


Markus
Member: Lochkartenstanzer
Lochkartenstanzer Mar 25, 2012 at 18:51:56 (UTC)
Goto Top
Ich würd' s so lösen:

tail -n $zeilen_max  $LOG >$tempfile
mv $tempfile $LOG

lks
Member: racer1601
racer1601 Mar 28, 2012 at 10:32:57 (UTC)
Goto Top
Danke euch beiden geht jetzt alles!

Alex