Bash: кошка первые строки файла и получить позицию - PullRequest
4 голосов
/ 22 апреля 2011

Я получил очень большой файл, который содержит n строк текста (при n <1000) в начале, пустую строку, а затем множество нетипизированных двоичных данных. </p>

Я хотел бы извлечь первые n строк текста, а затем каким-то образом извлечь точное смещение двоичных данных.

Извлечь первые строки просто, но как я могу получить смещение? bash не знает кодировки, поэтому просто считать количество символов бессмысленно.

Ответы [ 4 ]

5 голосов
/ 22 апреля 2011

grep имеет опцию -b для вывода байтового смещения.

Пример:

$ hexdump -C foo 
00000000  66 6f 6f 0a 0a 62 61 72  0a                       |foo..bar.|
00000009
$ grep -b "^$" foo 
4:
$ hexdump -s 5 -C foo
00000005  62 61 72 0a                                       |bar.|
00000009

На последнем шаге я использовал 5 вместо 4, чтобы пропустить перевод строки.

Также работает с умлаутами (äöü) в файле.

3 голосов
/ 22 апреля 2011

Используйте grep, чтобы найти пустую строку

grep -n "^$" your_file | tr -d ':'

При желании используйте tail -n 1, если вы хотите последнюю пустую строку (то есть, если верхняя часть файламожет содержать пустые строки перед запуском двоичного файла).

Используйте head для получения верхней части файла.

head -n $num
1 голос
/ 22 апреля 2011

Perl может сказать вам, где вы находитесь в файле:

pos=$( perl -le '
    open $fh, "<", $ARGV[0]; 
    $/ = "";  # read the file in "paragraphs" 
    $first_paragraph = <$fh>; 
    print tell($fh)
' filename )

В скобках, я пытался однострочно эту

pos=$( perl -00 -lne 'if ($. == 2) {print tell(___what?___); exit}' filename

Что такое переменная "текущий дескриптор файла"?Я не смог найти его в документах.

1 голос
/ 22 апреля 2011

Вы можете использовать такие инструменты, как hexdump или od для получения двоичных смещений вместо bash.Вот ссылка .

...