Я хочу разделить файл журнала длиной 400 тыс. Строк из определенного номера строки.
Для этого вопроса давайте сделаем это произвольным числом 300k.
Есть ли команда linux, которая позволяет мне это делать ( в сценарии )?
Я знаю, что split
позволяет разделить файл на равные части либо по размеру, либо по номерам строк, но это не то, что я хочу. Я хочу, чтобы первые 300k в одном файле и последние 100k во втором файле.
Любая помощь будет оценена. Благодарность!
Если подумать, это больше подходит для сайта суперпользователя или сервера.
linux
shell
split
filesplitting
денормализатор
источник
источник
Ответы:
file_name=test.log # set first K lines: K=1000 # line count (N): N=$(wc -l < $file_name) # length of the bottom file: L=$(( $N - $K )) # create the top of file: head -n $K $file_name > top_$file_name # create bottom of file: tail -n $L $file_name > bottom_$file_name
Кроме того, если подумать, разделение будет работать в вашем случае, поскольку первое разделение больше второго. Split помещает баланс входных данных в последний разделитель, поэтому
split -l 300000 file_name
будет выводить
xaa
с 300 тыс. строк иxab
100 тыс. строк для входа с 400 тыс. строк.источник
tail -n +L file_name > bottom_file
where простоL=K+1
без необходимостиwc
сначала запускатьsed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log
. IHMO, это более просто и не требует подсчета общего количества строк. Кроме того, он по-прежнему работает, если между выполнением каждой команды добавляются строки.