Polecenie Linux, aby pobrać zakres bajtów z pliku


15

Wiem o tym headi tailmogę wybrać -copcję określenia przesunięcia bajtów. Szukam sposobu wydajnego wyodrębnienia zakresu bajtów z dużego pliku dziennika.

Odpowiedzi:


17

DareDevil z komend Uniksa, ddna 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. ibsoznacza, ż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 ibsszkodzi wydajności, mam nadzieję, że nie.


W przypadku pliku 782090815 bajtów otrzymałem te czasy: time dd if=file.txt | wc -l= 00: 00: 03s. time dd if=file.txt ibs=1 count=782090815 | wc -l= 9:05:19
Danilo Souza Morães

11

Jeśli twoje zainteresowanie jest w bajtach, byłoby odbardziej interesujące.

-j, --skip-bytes=bytes
-N, --read-bytes=bytes

Tak więc, aby odczytać 16 bajtów zaczynających się od bajtu 1024 i wyprowadzić w ascii

od -j 1024 -N 16 -a /bin/sh

4

Możesz użyć dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(być może z, bs=1aby 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.


Cóż, jeśli chodzi o wydajność - 2 ddmożna łączyć ze sobą rurami (1. może przeciąć kawałek tłuszczu, a 2. wykona świetną robotę nad rurą, a nie dyskiem), ale ddma nie tylko bsoddzielne ibsi obsrównież, więc na przynajmniej mógłby generować z większymi blokami niż czytanie.
poige

1

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ć.

head ... file | tail ...

(Lub na odwrót. Cokolwiek.)


1
ogon powinien iść pierwszy w przypadku dużych odsunięć, w przeciwnym razie początek głowy jest odrzucany.
proski
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.