Ответ 1
Звучит как задание для sed
:
sed -n '8,12p' yourfile
... отправит строки с 8 по 12 из yourfile
в стандартную версию.
Если вы хотите добавить номер строки, вы можете сначала использовать cat -n
:
cat -n yourfile | sed -n '8,12p'
У меня мало файлов журналов по 100 Мбайт каждый. Лично я считаю громоздким заниматься такими большими файлами. Я знаю, что строки журнала, которые мне интересны, всего лишь от 200 до 400 строк или около того.
Что было бы хорошим способом извлечь relavant строки журнала из этих файлов, т.е. я просто хочу передать диапазон номеров строк в другой файл.
Например, входы:
filename: MyHugeLogFile.log
Starting line number: 38438
Ending line number: 39276
Есть ли команда, которую я могу запустить в cygwin для cat
только для этого диапазона в этом файле? Я знаю, что если я смогу каким-то образом отобразить этот диапазон в stdout, я также могу подключиться к выходному файлу.
Примечание. Добавление тега Linux
для большей видимости, но мне нужно решение, которое может работать в cygwin. (Обычно команды linux работают в cygwin).
Звучит как задание для sed
:
sed -n '8,12p' yourfile
... отправит строки с 8 по 12 из yourfile
в стандартную версию.
Если вы хотите добавить номер строки, вы можете сначала использовать cat -n
:
cat -n yourfile | sed -n '8,12p'
Вы можете использовать wc -l
, чтобы выяснить общее количество строк.
Затем вы можете объединить head
и tail
, чтобы попасть в нужный диапазон. Предположим, что лог - это 40 000 строк, вам нужны последние 1562 строки, а затем те, которые вы хотите, чтобы первый 838. Итак:
tail -1562 MyHugeLogFile.log | head -838 | ....
Или, возможно, проще использовать sed
или awk
.
Как насчет этого:
$ seq 1 100000 | tail -n +10000 | head -n 10
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
Он использует tail
для вывода из 10 000-й строки и далее, а затем head
, чтобы сохранить только 10 строк.
Тот же результат (почти) с sed
:
$ seq 1 100000 | sed -n '10000,10010p'
10000
10001
10002
10003
10004
10005
10006
10007
10008
10009
10010
У этого есть то преимущество, что вы можете напрямую вводить диапазон строк.
Я видел этот поток, когда пытался разбить файл в файлах со 100 000 строк. Лучшее решение, чем sed для этого:
split -l 100000 database.sql database-
Он предоставит файлы вроде:
database-aaa
database-aab
database-aac
...
И если вы просто хотите вырезать часть файла - скажем, с строки 26 на 142 - и вводить его в новый файл:
cat file-to-cut.txt | sed -n '26,142p' >> new-file.txt
Если вас интересуют только последние строки X, вы можете использовать команду "tail", как это.
$ tail -n XXXXX yourlogfile.log >> mycroppedfile.txt
Это сохранит последние строки XXXXX вашего файла журнала в новом файле с именем "mycroppedfile.txt"