Ich habe es oft mit unglaublich großen Protokolldateien (> 3 GB) zu tun. Ich habe festgestellt, dass die Leistung von weniger mit diesen Dateien schrecklich ist. Oft möchte ich in der Mitte der Datei springen, aber wenn ich weniger sage, um 15 M Zeilen vorwärts zu springen, dauert es Minuten.
Ich stelle mir das Problem vor, dass weniger die Datei nach '\ n' Zeichen durchsuchen muss, aber das dauert zu lange.
Gibt es eine Möglichkeit, es nur zu einem expliziten Offset zu bringen? ZB versuchen, in der Datei 1,5 Milliarden Byte Offset. Diese Operation sollte um Größenordnungen schneller sein. Wenn weniger eine solche Fähigkeit nicht bietet, gibt es ein anderes Werkzeug, das dies tut?
perl -pi -e 's/\n//g;' <filename>
Antworten:
Sie können weniger davon abhalten, Linien wie diese zu zählen
less -n
Um zu einem bestimmten Ort zu springen, wie z. B. 50% in.
less -n +50p /some/log
Dies war für mich sofort in einer 1,5-GB-Protokolldatei.Bearbeiten: Für einen bestimmten Byte-Versatz:
less -n +500000000P ./blah.log
quelle
Less ist als Pager von Natur aus zeilenorientiert. Wenn Sie eine große Datei starten, wird "Zeilennummern zählen" angezeigt, und Sie drücken die ESC-Taste, um dies zu stoppen. Andernfalls werden Zeilen gezählt. Es ist was es tut.
Wenn Sie direkt in die Mitte der Datei springen und den Anfang überspringen möchten, können Sie immer nur über den Anfang hinaus suchen. Ich würde sowas machen
tail -c +15000000 /some/log | less
.quelle
tail -c ...
oder Sie haben einen seltsamenlast
Befehl.less
scheint einen kleinen Overhead von den Gebietsschemaeinstellungen zu habenWenn Sie nur ASCII-Zeichen verwenden, können Sie dies etwas beschleunigen, indem Sie Folgendes verwenden:
In meinem Fall stieg der Durchsatz von ~ 30 MBit / s auf ~ 50 MBit / s (Rate ist CPU-gebunden)
quelle