Ich weiß das head
und tail
kann -c
optional einen Byte-Offset angeben. Ich suche nach einer Möglichkeit, einen Byte-Bereich aus einer großen Protokolldatei effizient zu extrahieren.
15
Ich weiß das head
und tail
kann -c
optional einen Byte-Offset angeben. Ich suche nach einer Möglichkeit, einen Byte-Bereich aus einer großen Protokolldatei effizient zu extrahieren.
Der Draufgänger der Unix-Befehle dd
zur Rettung!
dd if=yourfile ibs=1 skip=200 count=100
Das würde ab Byte 200 beginnen und 100 nächste Bytes oder mit anderen Worten, Bytes 200-300 anzeigen. ibs
bedeutet, dass dd nur jeweils ein Byte anstelle der Standard-512-Bytes liest, aber weiterhin in Standard-512-Byte-Chunks schreibt. Gehen Sie und sehen Sie, ob ibs
die Leistung schadet, ich hoffe nicht.
time dd if=file.txt | wc -l
= 00: 00: 03s.time dd if=file.txt ibs=1 count=782090815 | wc -l
= 9:05:19Wenn Ihr Interesse an den Bytes liegt, wäre
od
das von größerem Interesse.Also die 16 Bytes ab Byte 1024 auslesen und in ASCII ausgeben
quelle
Sie können verwenden
dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks
(möglicherweise mitbs=1
, um Ein-Byte-Blöcke zu erhalten, andernfalls werden 512-Byte-Blöcke verwendet). Ich bin mir nicht sicher, wie effizient es ist, es anzuweisen, jeweils ein Byte zu schreiben.quelle
dd
‚s kann zusammen Rohr gekettet sein (die ersten könnte fettes Stück geschnitten und die zweite feine Arbeit über das Rohr, nicht Scheibe tun würde), aberdd
hat nicht nur ,bs
aber getrenntibs
undobs
als gut, so bei Zumindest könnte es mit größeren Blöcken als Lesen ausgegeben werden.Vorausgesetzt, die Datei ist nicht übermäßig groß (z. B. mehrere GB oder so), ist das Weiterleiten von einer zur nächsten so effizient wie möglich, abgesehen vom Schreiben eines eigenen Programms.
(Oder umgekehrt. Egal.)
quelle