808 Stimmen

Drucken einer Datei, wobei die ersten X Zeilen übersprungen werden, in Bash

Ich habe eine sehr lange Datei, die ich ausdrucken möchte, wobei ich z. B. die ersten 1.000.000 Zeilen überspringen möchte.

Ich habe in der Manpage von cat nachgeschaut, aber ich habe keine Option gefunden, die dies ermöglicht. Ich bin auf der Suche nach einem Befehl oder einem einfachen Bash-Programm, um dies zu tun.

11voto

sourcerebels Punkte 5062

Dieses Shell-Skript funktioniert bei mir einwandfrei:

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

Wird mit dieser Beispieldatei (file.txt) verwendet:

one
two
three
four
five
six

Der Befehl (er wird von der zweiten bis zur vierten Zeile der Datei extrahiert):

edu@debian5:~$./script.sh 2 4 file.txt

Ausgabe dieses Befehls:

two
three
four

Natürlich können Sie es verbessern, indem Sie zum Beispiel testen, ob alle Argumente den erwarteten Wert haben :-)

1 Stimmen

++ für die Verwendung von awk, das nur unwesentlich portabler ist als tail

6voto

aamadeo Punkte 197
cat < File > | awk '{if(NR > 6) print $0}'

1 Stimmen

Dies ist ein Syntaxfehler in der Bash - in welcher Shell funktioniert er?

0 Stimmen

Ich führe dies in der Bash aus. Die < und > sind nicht Teil des Befehls, der Name der Datei sollte "< Datei >" ersetzen.

2 Stimmen

awk 'NR > 6 {print}' ist ausreichend... das if oder das $0 sind nicht erforderlich.

-2voto

Ich musste dasselbe tun und fand diesen Thread.

Ich habe es mit "tail -n +" versucht, aber es wurde einfach alles ausgedruckt.

Die mehr +Zeilen funktionierten in der Eingabeaufforderung gut, aber es stellte sich heraus, dass es sich völlig anders verhielt, wenn es im Headless-Modus (Cronjob) ausgeführt wurde.

Ich habe das schließlich selbst geschrieben:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"

2 Stimmen

Korrekter Link von Preis für nutzlose Verwendung einer Katze . Das Vorherige wird durch Werbung ersetzt.

1 Stimmen

@kub1x Ich denke nicht, dass "cat" hier nutzlos ist, da "cat | wc -l" eine andere Ausgabe erzeugt als das einfache "wc -l". Ersteres ist für arithmetische Operationen geeignet, letzteres nicht.

0 Stimmen

@Jack Ich habe nicht über die Verwendung von cat , sondern nur die Behebung eines Links in einem Kommentar, der zu einer toten Seite führte. Der ursprüngliche Kommentar muss gelöscht worden sein. Wie auch immer, danke für den Hinweis.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X