파일에서 바이트 범위를 검색하는 Linux 명령


15

나도 알아 headtail취할 수 -c바이트 오프셋을 지정하는 옵션을 선택합니다. 큰 로그 파일에서 바이트 범위를 효율적으로 추출하는 방법을 찾고 있습니다.

답변:


17

유닉스 명령의 DareDevil dd, 구조!

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

그것은 바이트 200에서 시작하여 100 다음 바이트, 즉 바이트 200-300을 보여줍니다. ibsdd는 기본 512 바이트 대신 한 번에 하나의 바이트 만 읽지 만 여전히 기본 512 바이트 청크에 기록합니다. 가서 ibs성능에 해를 끼치 지 않길 바래요.


782090815 바이트의 파일의 경우 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

관심이 바이트에 있다면 od더 많은 관심을 가질 것입니다.

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

따라서 바이트 1024에서 시작하여 16 바이트를 읽고 ascii로 출력

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

4

사용할 수 있습니다 dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks( bs=11 바이트 블록을 얻는 데 가능할 수도 있고 그렇지 않으면 512 바이트 블록을 사용합니다). 그러나 한 번에 한 바이트 씩 쓰도록 지시하는 것이 얼마나 효율적인지 확실하지 않습니다.


효율성에 대한 우려 음, 만약 - 2 dd의 파이프 체인 (제 1 회 지방 조각을 잘라 수 있으며 2는 디스크가 아닌, 파이프를 통해 좋은 일을 할 것입니다) 함께 할 수 있지만, dd이뿐만 아니라 bs하지만, 별도의 ibsobs뿐만 아니라, 그래서에서 최소한 읽기보다 큰 블록으로 출력 할 수 있습니다.
poige

1

파일의 크기가 너무 크지 않다고 가정하면 (예 : 몇 GB 정도), 한 번에서 다음 번으로 파이핑하는 것이 효율적일 것입니다.

head ... file | tail ...

(또는 다른 방법으로도 마찬가지입니다.)


1
큰 오프셋의 경우 테일이 먼저 진행되어야하며, 그렇지 않으면 헤드 출력의 시작이 삭제됩니다.
proski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.