Alle Zeilen außer der letzten ausgeben

Mit cat gibt man einfach an Standard Out die Zeilen einer Datei aus. Mit head und tail kann man die Ausgabe der Zeilen nach StdOut begrenzen. Entweder vom Kopf her oder vom Ende her:

# Die ersten 20 Zeilen
head -20
# Die letzten 20 Zeilen
tail -20

Um alle Zeilen von Anfang bis zum Ende außer der letzten Zeile auszugeben, kann man sed verwenden:

cat FILE | sed \$d

Noch einfacher geht es aber mit den Originalen Befehlen tail und head. (Wir nummerieren alle Zeilen und prüfen so die Ergebnisse.):

# Alle Zeilen außer den drei letzten ausgeben.
cat FILE | nl -b a | head -n -3  
# Alle Zeilen ab der dritten Zeile ausgeben.
cat FILE | nl -b a | tail -n +3 

Es gibt also einen kleinen Unterschied bei der Verwendung von head und tail.

man head
 -n, --lines=[-]NUM print the first NUM lines instead of the first 10; 
with the leading '-', print all but the last NUM lines of each file 

man tail 
-n, --lines=[+]NUM output the last NUM lines, instead of the last 10; 
or use -n +NUM to output starting with line NUM 

Zeilenanzahl begrenzen

Um die Zeilenanzahl auf die letzten bzw. neusten 1000 Zeilen einer Datei zu begrenzen, muss man

  1. die gesamte Zahl der Zeilen kennen
  2. diese auf die Zielzahl (1000) begrenzen und
  3. die Datei überschreiben
#!/bin/bash

# CONFIG
datei=/Serverpfad/logdatei.txt
maxzeilen=1000

# PROG
if [ -e "$datei" ]; then
 WORDCOUNT="$(wc -l <${datei})"
 if [ "${WORDCOUNT}" -gt "${maxzeilen}" ]; then
    var1=$( tail -n ${maxzeilen} "$datei" )
    echo "$var1" > "$datei"
  fi
fi

 

Tags