Мне нужно что-то найти в огромном файле журнала (более 14 ГБ). Я почти уверен, что это последние 4 ГБ или около того.
Есть ли способ пропустить первые X ГБ, чтобы ускорить процесс?
Думаю, вы могли бы использовать tail для вывода только последних 4 ГБ или около того, используя переключатель -c
-c, - байты = [+] ЧИСЛО
вывести последние ЧИСЛО байтов; или используйте -c + NUM для вывода, начиная с байта NUM каждого файла
Возможно, вы могли бы что-то сделать и с dd , установив bs = 1
и skip
] на смещение, которое вы хотите начать, например
dd if=file bs=1024k skip=12g | grep something
Я публикую это просто потому, что об этом просили некоторые комментарии.
В конечном итоге я использовал (файл размером 15 ГБ). Это работало очень быстро и сэкономило мне массу времени.
tail -f -c 14G file | grep something
Я также провел очень элементарный тест на том же файле. Я тестировал:
файл grep xxx
// потребовалось навсегда (> 5 минут)dd if = file bs = 1 skip = 14G | grep xxx
// очень быстро <1 секtail -c 14g | grep xxx
// довольно быстро <2 секунды
хвост
немного короче.
NB: используемый суффикс g
и G
различаются для каждой команды (Ubuntu 15.10)
Это не отвечает на вопрос о названии, но сделает то, что вы хотите. Используйте tac, чтобы перевернуть файл, затем используйте grep, чтобы найти вашу строку. Если ваша строка встречается в файле только один раз или известное количество раз, дайте ей поработать, пока она не найдет известное количество вхождений. Таким образом, если ваше предположение о том, где он находится в файле, неверно, он все равно его найдет. Если вы действительно хотите его ограничить, вы можете использовать для этого head. Команда head будет находиться между tac и grep.
Итак, команда выглядит так:
tac < logfile | grep myString