Gibt es eine sehr einfache Möglichkeit (vielleicht eine Zeile mit sed zu verwenden?) , Für jede Zeile n
Zeilen zu erhalten , beginnend bei einer Zeile innerhalb dieses Zeilenabschnitts ?n
m
Insbesondere habe ich eine Datei mit Millionen von Zeilen. Für jeweils 4 Zeilen möchte ich die ersten beiden Zeilen erhalten.
Aber ich denke, ich möchte auch eine Vorstellung davon bekommen, wie dies in anderen ähnlichen Situationen geschieht. Deshalb habe ich hier eine allgemeinere Frage gestellt.
text-processing
sed
Kaffee
quelle
quelle
sed '1~3,+1 ! d' file_with_million_lines
?Antworten:
Mit
gnu split
:und wenn Sie dies erst nach der
i
dritten Zeile tun möchten, leiten Sie die vorherigen Zeilen einfach weiter zu/dev/null
:Wenn Sie keinen Zugriff auf
gnu
Tools haben, können Sie Folgendes verwendenawk
:quelle
'NR<=i{next} c++%m<n'
Sie können die
~
in der Adresse in GNU sed verwenden:Darin steht "Alle 4 Zeilen die erste Zeile drucken und alle 4 Zeilen die zweite Zeile drucken" oder "Ab Zeile 1 jede 4. Zeile drucken und ab Zeile 2 jede 4. Zeile drucken".
quelle
Für GNU sed
oder allgemeiner:
quelle
Oder dies
gnu sed
:-n
unterdrückt die Ausgabe. Wenn in Zeile1+4*k
(k = Iterator) die aktuelle Zeile und die nächste Zeile eingelesen werdenpattern space
undp
den (aktuellen) Musterraum drucken (dh die Ausgabe zeitlich aktivieren)quelle