sed, wie die ersten 17 Zeilen und die letzten 8 Zeilen in einer Datei gelöscht werden

8

Ich habe eine große Datei 150GB CSV-Datei und ich möchte die ersten 17 Zeilen und die letzten 8 Zeilen entfernen. Ich habe folgendes versucht, scheint aber nicht richtig zu funktionieren

%Vor%

und

%Vor%

Ich frage mich, ob jemand mit sed oder awk helfen kann, ein Liner wird großartig sein?

    
Deano 07.02.2013, 13:32
quelle

7 Antworten

9
%Vor%     
Ed Morton 07.02.2013, 13:46
quelle
17

head und tail sind besser für den Job als sed oder awk .

%Vor%     
choroba 07.02.2013 13:36
quelle
2

Alle awk:

%Vor%     
Scrutinizer 08.03.2013 01:31
quelle
1
%Vor%

wo

  1. /.../= Trennzeichen

  2. n = Zeilennummer

  3. string = Zeichenfolge gefunden in Zeile

  4. regex = regulärer Ausdruck, der dem gesuchten Muster entspricht

  5. addr = Adresse einer Zeile (Nummer oder Muster)

  6. d = löschen

Siehe link

    
user2166576 07.02.2013 13:37
quelle
0
%Vor%

Bearbeiten: Wie mtk im Kommentar gepostet wird das nicht funktionieren. Wenn Sie wc verwenden und die Länge der Datei verfolgen möchten, sollten Sie Folgendes verwenden:

%Vor%

oder:

%Vor%

Was macht diese Lösung weniger elegant als die von choroba gepostet :)

    
Adam Sznajder 07.02.2013 13:37
quelle
0

Ich habe das heute für die Shell gelernt.

%Vor%

Man muss ein nicht konsumierendes head verwenden, daher die Verwendung von ghead aus den GNU coreutils.

    
sotapme 07.02.2013 14:17
quelle
0

Ähnlich wie Thors Antwort , aber ein bisschen kürzer:

%Vor%

Das -i '' sagt sed, die Datei an Ort und Stelle zu bearbeiten. (Die Syntax kann auf Ihrem System etwas anders sein. Überprüfen Sie die Manpage.)

Wenn Sie front -Zeilen von vorne und tail vom Ende löschen möchten, müssen Sie die folgenden Zahlen verwenden:

%Vor%

(Ich habe sie hier in geschweifte Klammern gesetzt, aber das ist nur Pseudocode. Sie müssen sie durch die tatsächlichen Zahlen ersetzen. Außerdem sollte es mit {front+1} funktionieren, aber nicht auf meinem Rechner (macOS 10.12 .4). Ich denke, das ist ein Fehler.)

Ich werde versuchen zu erklären, wie der Befehl funktioniert. Hier ist eine lesbare Version:

%Vor%

Zuerst überspringen wir 17 Zeilen. Das ist einfach. Der Rest ist knifflig, aber im Grunde behalten wir einen Puffer von acht Zeilen. Wir beginnen nur mit dem Drucken von Zeilen, wenn der Puffer voll ist, aber wir stoppen den Druck, wenn wir das Ende der Datei erreichen, so dass am Ende noch acht Zeilen im Puffer übrig sind, die wir nicht gedruckt haben - mit anderen Worten, wir löschte sie.

    
quelle

Tags und Links