Как я могу получить часть текстового файла по терминалу

Как я могу получить какой-то блок текста по строкам?

У меня есть файл журнала с 6000000 строками, и я хочу получить только блок от 607366 до 700000.

Я пробовал что-то вроде:

head -n 607366 | tail -700000 server.log > outputFile.txt
7
задан 16 October 2013 в 05:28

2 ответа

Оптимизации по Раду:

sed '607366,$!d;700000q' server.log > outputFile.txt

Таким образом, мы прекращаем читать (q) server.log после того, как находим 700000 -ную строку.

head -n 700000 server.log | tail -n "$((700000-607366+1))"

Нет необходимости вызывать bc здесь, мы можем использовать стандартное арифметическое расширение.

Но сделать это наоборот будет гораздо эффективнее:

tail -n +607366 | head -n "$((700000-607366+1))"

, поскольку это не подразумевает сохранение в памяти большого количества строк.

0
ответ дан 16 October 2013 в 05:28

Вы можете использовать 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
0
ответ дан 16 October 2013 в 05:28

Другие вопросы по тегам:

Похожие вопросы: