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?
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:
oder:
%Vor%Was macht diese Lösung weniger elegant als die von choroba gepostet :)
Ä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:
(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.
Tags und Links linux bash sed text-processing