Как извлечь текст из большого файла, начиная с первого появления строки?
У меня есть большой файл журнала, который я хочу просмотреть. Все плохое начинается с определенного появления строки ошибки. Затем я хочу посмотреть на последние X строк с этой точки и посмотреть, что могло послужить причиной этой ошибки. Я не могу открыть файл в моем любимом текстовом редакторе, потому что он исчерпывает всю оперативную память на машине.
Я подумал, что, возможно, мне удастся найти строку, в которой это происходит, а затем использовать другую утилиту для передачи данных из строки X в строку Y. Это возможно?
3 ответа
Вы можете просто использовать "grep" с -A
и / или -B
опции. -A
Коммутатор будет читать число X строк после ошибки, так что это, вероятно, то, что вы хотите, и -B
Коммутатор будет читать X количество строк перед ошибкой, поэтому вы должны сделать что-то вроде этого:
grep -A10 -B2 "строка для поиска" /path/and/file.tofind
найти 10 строк, которые встречаются после "строки для поиска", а также 2 строки перед ней.
В качестве альтернативы - и это, вероятно, гораздо худшее решение, вы можете просто использовать "head" и "tail", чтобы найти первую, а затем последнюю часть нужного вам файла; но это предполагает, что вы знаете номера строк. То есть, если у вас есть файл длинной строки, и вы хотите прочитать строки 500-510, вы можете попробовать это:
head -510 / etc / file / to / search | хвост -10
Который сначала извлечет первые 510 строк файла, а затем прочитает последние 10 из этих строк.
Получите новый "любимый редактор". vi
не читает файлы в оперативную память в полном объеме.
В vi
Вы можете искать строку, набрав /
, строка для поиска и Enter. Соответствующая строка будет расположена в середине экрана (окна), поэтому вы сможете увидеть примерно 12 строк до и 12 строк после (если ваше окно имеет высоту 24 строки). Вы можете, конечно, прокручивать вперед или назад, чтобы увидеть больше. Нажмите n, чтобы найти n ext вхождение строки.
Следующий скрипт даст вам первые 10 строк и 10 столбцов вырезанного из большого файла -f1-10 -d' ' your_big_file| голова -n10