Ich möchte eine 400.000 Zeilen lange Protokolldatei von einer bestimmten Zeilennummer trennen.
Lassen Sie uns für diese Frage eine beliebige Zahl von 300k festlegen.
Gibt es einen Linux-Befehl, mit dem ich dies tun kann ( innerhalb des Skripts )?
Ich weiß, dass split
ich die Datei zu gleichen Teilen entweder nach Größe oder nach Zeilennummern aufteilen kann, aber das ist nicht das, was ich will. Ich möchte die ersten 300k in einer Datei und die letzten 100k in der zweiten Datei.
Jede Hilfe wäre dankbar. Vielen Dank!
Auf den zweiten Blick wäre dies eher für die Superuser- oder Serverfault-Site geeignet.
linux
shell
split
filesplitting
Denormalisator
quelle
quelle
Antworten:
Beim zweiten Gedanken funktioniert die Aufteilung in Ihrem Fall auch, da die erste Aufteilung größer als die zweite ist. Split setzt also den Rest der Eingabe in den letzten Split
split -l 300000 file_name
ausgegeben
xaa
mit 300K Linien undxab
mit 100K Leitungen, für einen Eingang mit 400K Linien.quelle
tail -n +L file_name > bottom_file
wo einfachL=K+1
ohne die Notwendigkeit zu laufenwc
zuerstsed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log
. IHMO, dies ist einfacher und erfordert nicht die Berechnung der Gesamtzahl der Zeilen. Es funktioniert auch weiterhin, wenn zwischen der Ausführung jedes Befehls Zeilen angehängt wurden.