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

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

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

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

  • Перемещение каталогов, несмотря на ошибки
  • Как работает липкий бит?
  • Что делает опция ядра CONFIG_NLS_UTF8?
  • Как оценить, стоит ли использовать дедупликацию?
  • Может ли файловая система быть непоследовательной, если она прерывается при перемещении файла?
  • Сколько бит - это флаги доступа к файлу?
  • установка в непустой каталог, а затем удаление исходных файлов
  • Накладные расходы ввода-вывода устройства, зашифрованного dm?
  • 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 намного быстрее и еще лучше

    Interesting Posts

    Что делает Linux тратить память на другие, кроме пользовательских, кэшей и плиты?

    Как установить nomodeset на RHEL 5?

    Как путь к исполняемому набору, если скрипт находится в PATH

    Доступно ли простое в использовании многофакторное полное шифрование диска?

    С расположением EN / HE, почему клавиши со стрелками переключаются с логического на визуальный с помощью Ctrl вниз?

    Использовать sed, как заменить шаблон, если он встречается в строке, следующей за другим шаблоном?

    Команда Easy USB disk mount

    Проблемы с перемещением домашнего раздела

    Беспроводной адаптер RT2800USB прекращает сканирование

    Я хочу, чтобы procmail задерживал электронное письмо одного пользователя через 10 секунд, а затем продолжал обработку

    Могу ли я легко переключаться с openSUSE Tumbleweed на Leap без переустановки всего?

    Повторно подключить соединение с обратной связью ssh

    Dbus: выход из системы другого пользователя

    Ввод китайского языка в Debian с использованием IBus

    Нужно получить командную строку всех запущенных демонов

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