Perintah Linux untuk mengambil rentang byte dari file


15

Saya tahu itu headdan taildapat mengambil -copsi untuk menentukan byte offset. Saya mencari cara untuk secara efisien mengekstrak rentang byte dari file log besar.

Jawaban:


17

The DareDevil dari perintah Unix, dduntuk menyelamatkan!

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

Itu akan mulai dari byte 200 dan menampilkan 100 byte berikutnya, atau dengan kata lain, byte 200-300. ibsberarti dd hanya membaca satu byte pada suatu waktu alih-alih 512 byte default, tetapi masih menulis dalam potongan 512 byte default. Pergi dan lihat apakah ibsmerusak kinerja, saya harap tidak.


Untuk file 782090815 byte, saya dapat waktu ini: 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

Jika minat Anda dalam byte, akan odlebih menarik.

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

Jadi untuk membaca 16 byte mulai dari byte 1024, dan output dalam ascii

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

4

Anda dapat menggunakan dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(mungkin dengan bs=1untuk mendapatkan blok satu byte, jika tidak menggunakan blok 512 byte). Tidak yakin seberapa efisien untuk mengatakannya untuk menulis satu byte pada suatu waktu.


Nah, jika yang bersangkutan mengenai efisiensi - 2 dd's dapat pipa-dirantai bersama-sama (1 mungkin memotong sepotong lemak dan ke-2 akan melakukan pekerjaan baik atas pipa, tidak disk), tetapi ddtidak hanya bstetapi terpisah ibsdan obsjuga, jadi pada Setidaknya itu bisa dihasilkan dengan blok yang lebih besar daripada membaca.
poige

1

Dengan asumsi file tersebut tidak terlalu besar (misalnya beberapa GB atau lebih), pipa dari satu ke yang berikutnya seefisien yang Anda dapatkan, singkat menulis program Anda sendiri untuk melakukannya.

head ... file | tail ...

(Atau sebaliknya. Mana pun.)


1
ekor harus pergi dulu untuk offset besar, jika tidak, output head awal akan dibuang.
proski
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.