Как я могу получить какой-то блок текста по строкам?
У меня есть файл журнала с 6000000 строками, и я хочу получить только блок от 607366 до 700000.
Я пробовал что-то вроде:
head -n 607366 | tail -700000 server.log > outputFile.txt
Оптимизации по Раду:
sed '607366,$!d;700000q' server.log > outputFile.txt
Таким образом, мы прекращаем читать (q
) server.log
после того, как находим 700000 -ную sup> строку.
head -n 700000 server.log | tail -n "$((700000-607366+1))"
Нет необходимости вызывать bc
здесь, мы можем использовать стандартное арифметическое расширение.
Но сделать это наоборот будет гораздо эффективнее:
tail -n +607366 | head -n "$((700000-607366+1))"
, поскольку это не подразумевает сохранение в памяти большого количества строк.
Вы можете использовать sed
:
sed -n 607366,700000p server.log > outputFile.txt
Если вы хотите использовать head
и tail
, это правильный путь:
head -n 700000 server.log | tail -n $(echo 700000-607366+1 | bc) > outputFile.txt
или, короче :
head -n 700000 server.log | tail -n 92635 > outputFile.txt