Administrator Startseite
Cover IT-Administrator
Im Wonnemonat Mai dreht sich im IT-Administrator Magazin alles rund um den Schwerpunkt “Systemmanagement”. So lesen Sie in der Ausgabe, wie Sie Ihre IT-Umgebung mit dem Microsoft System Center Operations Manager 2012 sowie mit der Open Source-Software Pandora FMS im Auge behalten. Außerdem zeigt Ihnen die Redaktion die besten Tricks für das Active Directory. In den Produkttest müssen unter anderem Aruba Networks ClearPass und Brainware ... mehr
Mitglied: racer1601
Diese Frage heraufstufen
Diese Frage heraufstufen
0
Diese Frage herunterstufen

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:
01.
#!/bin/bash -x 
02.
# Sicherungsscript.sh 
03.
#*****************************************# 
04.
#***           BackupScript            ***# 
05.
#***            00.03.2012             ***# 
06.
#***       V.0.1Linux A. Schmidt       ***# 
07.
#*****************************************# 
08.
DATE=$(date +%Y.%m.%d) 
09.
TIME=$(date +%H:%M) 
10.
#Variable DATE und TIME erstellen 
11.
####################################################### 
12.
LOG=/home/administrator/BachupLog1.txt 
13.
zeilen_max=150 
14.
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.

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

Ich hoffe es kann mir jemand helfen!

1847732db470e5d196cc74d3d698b757.jpg

d2ad641d02be37dd35a12849ef3c498c.jpg
Mitglied: bastla
Diesen Kommentar heraufstufen
0
Diesen Kommentar herunterstufen
bastla am 25.03.2012 um 18:27 Uhr
Hallo racer1601!

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

Grüße
bastla
Mitglied: hmarkus
Diesen Kommentar heraufstufen
0
Diesen Kommentar herunterstufen
hmarkus am 25.03.2012 um 19:52 Uhr
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
Mitglied: Lochkartenstanzer
Diesen Kommentar heraufstufen
0
Diesen Kommentar herunterstufen
Lochkartenstanzer am 25.03.2012 um 20:51 Uhr
Ich würd' s so lösen:

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

lks
Mitglied: racer1601
Diesen Kommentar heraufstufen
0
Diesen Kommentar herunterstufen
racer1601 am 28.03.2012 um 12:32 Uhr
Danke euch beiden geht jetzt alles!

Alex
mehr ...Ähnliche Inhalte