Wiem o tym head
i tail
mogę wybrać -c
opcję określenia przesunięcia bajtów. Szukam sposobu wydajnego wyodrębnienia zakresu bajtów z dużego pliku dziennika.
15
Wiem o tym head
i tail
mogę wybrać -c
opcję określenia przesunięcia bajtów. Szukam sposobu wydajnego wyodrębnienia zakresu bajtów z dużego pliku dziennika.
DareDevil z komend Uniksa, dd
na ratunek!
dd if=yourfile ibs=1 skip=200 count=100
To zaczyna się od bajtu 200 i pokazuje 100 kolejnych bajtów, czyli innymi słowy bajty 200-300. ibs
oznacza, że dd odczytuje tylko jeden bajt naraz zamiast domyślnych 512 bajtów, ale nadal zapisuje w domyślnych porcjach 512-bajtowych. Idź i zobacz, czy to ibs
szkodzi wydajności, mam nadzieję, że nie.
time dd if=file.txt | wc -l
= 00: 00: 03s.time dd if=file.txt ibs=1 count=782090815 | wc -l
= 9:05:19Jeśli twoje zainteresowanie jest w bajtach, byłoby
od
bardziej interesujące.Tak więc, aby odczytać 16 bajtów zaczynających się od bajtu 1024 i wyprowadzić w ascii
źródło
Możesz użyć
dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks
(być może z,bs=1
aby uzyskać bloki jednobajtowe, w przeciwnym razie używa bloków 512-bajtowych). Nie jestem jednak pewien, jak efektywnie jest mówić po jednym bajcie na raz.źródło
dd
można łączyć ze sobą rurami (1. może przeciąć kawałek tłuszczu, a 2. wykona świetną robotę nad rurą, a nie dyskiem), aledd
ma nie tylkobs
oddzielneibs
iobs
również, więc na przynajmniej mógłby generować z większymi blokami niż czytanie.Zakładając, że plik nie jest zbyt duży (np. Kilka GB lub więcej), przesyłanie strumieniowe z jednego do drugiego jest tak wydajne, jak to tylko możliwe, bez pisania własnego programu, aby to zrobić.
(Lub na odwrót. Cokolwiek.)
źródło