Wie kann ich einen Textblock durch Zeilen erhalten?
Ich habe eine Protokolldatei mit 6000000 Zeilen und möchte nur einen Block von 607366 bis 700000 erhalten.
Ich habe so etwas versucht wie:
head -n 607366 | tail -700000 server.log > outputFile.txt
Wie kann ich einen Textblock durch Zeilen erhalten?
Ich habe eine Protokolldatei mit 6000000 Zeilen und möchte nur einen Block von 607366 bis 700000 erhalten.
Ich habe so etwas versucht wie:
head -n 607366 | tail -700000 server.log > outputFile.txt
Antworten:
Sie können verwenden sed:
sed -n 607366,700000p server.log > outputFile.txt
Wenn Sie verwenden möchten , headund tailist dies der richtige Weg:
head -n 700000 server.log | tail -n $(echo 700000-607366+1 | bc) > outputFile.txt
oder kürzer:
head -n 700000 server.log | tail -n 92635 > outputFile.txt
Optimierungen an Radus:
sed '607366,$!d;700000q' server.log > outputFile.txt
Auf diese Weise halten wir lesen ( q) , server.lognachdem wir die 700000 finden ten Zeile.
head -n 700000 server.log | tail -n "$((700000-607366+1))"
Hier muss nicht aufgerufen bcwerden, wir können die Standard-Arithmetik-Erweiterung verwenden.
Aber umgekehrt wird es viel effizienter sein:
tail -n +607366 | head -n "$((700000-607366+1))"
da es nicht darum geht, eine große Anzahl von Zeilen im Speicher zu speichern.