10

Я ищу способ в Unix разделить файл на два файла по заданному номеру строки.

split -l 100 file_name близко к тому, что я ищу, но эта команда создает несколько файлов, каждый из 100 строк. Я ищу команду для разделения файла на два файла с заданным номером строки. Есть ли способ сделать это в Unix?

6 ответов6

10

Немного более трудное решение:

(head -100 > f1.txt; cat > f2.txt) < input.txt
7

Используйте awk , так что вам нужно сделать всего один проход через входной файл. Далее предполагается, что вы хотите первые 122 строки в первом файле, а остальные во втором.

awk 'NR < 123 { print >> "top_file"; next } {print >> "bottom_file" }' file_name
6

Вы можете использовать head и tail чтобы получить обе части:

head -n K file_name > top_file
tail -n L file_name > bottom_file

где K - номер строки, а L - количество строк снизу (общее количество строк - K).

(вы можете получить общее количество строк, используя wc -l file_name).

4

И head и tail имеют опции для создания строк из "другого" конца файла, чем они могли бы. Итак, у вас есть эти два варианта:

head -n 100 source.txt > file1.txt
head -n -100 source.txt > file2.txt

или (где NNN на 100 меньше, чем вывод wc -l source.txt):

tail -n +NNN source.txt > file1.txt
tail -n NNN source.txt > file.txt

Вы можете прочитать справочные страницы для ваших версий head и tail для получения дополнительной информации.

3

Вы можете использовать csplit (если доступно), чтобы сделать это:

csplit file N+1

разделит файл на две части, одна часть до (и включая) строки N и другая часть от строки N+1 до последней строки.
Если вы хотите разделить на (но не включая) номер строки N:

csplit file N
0

Вы можете использовать «wc», «dc», «head» и «tail». Т.е.

unix> wc -l foo
545 /tmp/foo
unix> dc -e '545 100 - p'
445
unix> head -n 100 foo > filea
unix> tail -n 445 foo > fileb

Для простоты использования, вы можете превратить выше в сценарий оболочки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .