Команда Linux для отримання діапазону байт з файлу


15

Я знаю це headі tailможу взяти -cваріант для визначення зміщення байтів. Я шукаю спосіб ефективного витягу байтового діапазону з великого файлу журналу.

Відповіді:


17

DareDevil команд Unix, ddна допомогу!

dd if=yourfile ibs=1 skip=200 count=100

Це починається з байту 200 і показує 100 наступних байтів, або, іншими словами, байтів 200-300. ibsозначає, що dd зчитує лише один байт за один раз замість 512 байтів за замовчуванням, але все ще виписує в замовчуванні фрагменти 512 байтів. Подивіться, чи ibsшкодить виступ, я сподіваюся, що ні.


Для файлу з 782090815 байтами я отримав ці рази: time dd if=file.txt | wc -l= 00: 00: 03 с. time dd if=file.txt ibs=1 count=782090815 | wc -l= 9:05:19
Данило Суза Мораш

11

Якщо ваш інтерес є в байтах, був odби більший інтерес.

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

Отже, читати 16 байт, починаючи з байта 1024, і виводити в ascii

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

4

Ви можете використовувати dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(можливо, bs=1для отримання однобайтових блоків, інакше він використовує 512 байт-блоки). Не впевнений, наскільки ефективно сказати йому писати один байт за один раз.


Ну, якщо стурбовані ефективністю - 2 dd-х можна з'єднати в ланцюги (1-й може вирізати шматок жиру, а другий - добре виконати роботу над трубою, а не диском), але ddмає не тільки, bsале окремо, ibsі obsтак, принаймні, це може виводити з більшими блоками, ніж читання.
poige

1

Якщо припустити, що файл не надто великий (наприклад, кілька Гб або близько того), передача даних від одного до другого настільки ж ефективна, як ви отримаєте, якщо не написати власну програму для цього.

head ... file | tail ...

(Або навпаки. Що б там не було.)


1
хвіст повинен йти спочатку при великих зміщеннях, інакше початок виведення голови відкидається.
proski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.