Возможно ли в bash начать чтение файла из смещения счетчика байтов?

Я хочу найти дату, которая находится где-то в журнале объемом 8 ГБ (текст).

Могу ли я несколько обойти полное последовательное чтение и сначала сделать двоичные расщепления файла (размер) или каким-то образом перейти к файловой системе inodes (о которой я очень мало знаю), чтобы начать чтение из каждой точки разделения, пока не найду подходящее смещение откуда начать мой текстовый поиск строки, содержащей дату?

tail читает последнюю строку, не использует нормальное последовательное чтение, поэтому я задаюсь вопросом, доступно ли это средство в bash или мне нужно использовать Python или C / C ++ … но меня особенно интересует опция bash ..

4 Solutions collect form web for “Возможно ли в bash начать чтение файла из смещения счетчика байтов?”

 for (( block = 0; block < 16; block += 1 )) do echo $block; dd if=INPUTFILE skip=$((block*512))MB bs=64 count=1 status=noxfer 2> /dev/null | \ head -n 1 done 

который .. не создает файлы с временным разделением, пропускает блоки * 512 Мбайт данных при каждом запуске, считывает 64 байта из этой позиции и ограничивает вывод в первую строку из этих 64 байтов.

вы можете настроить 64 на все, что вам кажется нужным.

Похоже, вы хотите:

 tail -c +1048576 

или любое количество байтов, которое вы хотите пропустить. Знак плюса говорит хвосту для измерения от начала файла, а не до конца. Если вы используете версию хвоста GNU, вы можете написать это как:

 tail -c +1M 

Чтобы получить фиксированное количество байтов после разреза, вместо всего остального файла просто пропустите его через голову:

 tail -c +1048576 | head -c 1024 

Я бы попробовал что-то вроде этого, чтобы разбить журнал на куски 512MiB для более быстрого разбора.

 split <filename> -b 536870912 

Если вы ищете файл, он будет работать:

 for file in x* ; do echo $file head -n 1 $file done 

Используйте этот вывод, чтобы определить, какой файл grep для вашей даты.

Вот мой сценарий, я ищу первую строку, первое поле соответствует моему числу. Строки сортируются в соответствии с первым полем. Я использую dd для проверки первой строки блоков из 128K, затем я перехожу к блоку и выполняю поиск. Это повышает эффективность, так как файл превышает 1M.

Любые комментарии или исправления приветствуются!

 #!/bin/bash search=$1; f=$2; bs=128; max=$( echo $(du $f | cut -f1)" / $bs" | bc ); block=$max; for i in $(seq 0 $max); do n=$(dd bs=${bs}K skip=$i if=$f 2> /dev/null| head -2 | tail -1 | cut -f1) if [ $n -gt $search ]; then block=`expr $i - 1` break; fi done; dd bs=${bs}K skip=$block if=$f 2> /dev/null| tail -n +2 | awk -v search="$search" '$1==search{print;exit 1;};$1>search{exit 1;};'; 

* EDIT * ** grep намного быстрее и еще лучше

  • Проблема с размером файловой системы
  • Как установить максимальный размер каталога?
  • Каковы последствия наличия большого количества файлов в каталоге в файловой системе ext4?
  • Когда каталоги перестали быть читаемыми в качестве файлов?
  • Предоставлять доступ только для чтения к определенным папкам?
  • резервная таблица inode на ext2 / 3/4
  • Каковы блокировки «root», «home» и «swap» и как их удалить?
  • Обязательно ли иметь файловую систему и MMU в Linux?
  • Как Linux знает местоположение файлов данных на диске
  • Доступ к файловой системе Windows из ОС Linux
  • Как шифровать флэш-диск с помощью SecurStick?
  • Interesting Posts

    X (?) Перезапуск каждую минуту при тестировании debian

    / readonly при загрузке, но не понимаю, почему. как исследовать и исправлять?

    Grep: неожиданные результаты при поиске слов в заголовке с man-страницы

    Файловая система mhddfs зависает через некоторое время с большой папкой

    Получение доступа к терминалу на старом, странном оборудовании

    Как приостановить и возобновить процессы, такие как bash

    Есть ли простой в установке дистрибутив со всеми необходимыми инструментами для компиляции (make, autotools и т. Д.)?

    Преобразовать .out файл в .pdf с помощью сценария оболочки

    Вербальное считывание регулярных выражений sed в квадратных скобках, звездочка вне скобок

    Почему. Xauthority не может принадлежать учетной записи root, чтобы пройти вход в систему?

    Как распаковать источник libc6 на Hardy, используя debian / rules?

    Отображение номера недели в определенном формате с помощью ncal или cal

    Запретить разрешение монтировать любые диски пользователю

    Должен ли я изменить репозиторий Debian после dist-upgrade?

    Простой способ найти количество секунд между двумя (нестандартными) форматами даты?

    Linux и Unix - лучшая ОС в мире.