У меня большой файл, и мне нужно разбить его на два файла. Предположим, что в первом файле следует выбрать 1000 строк, поместить их в другой файл и удалить эти строки в первом файле.
Я пытался использовать, split
но это создает несколько кусков.
text-processing
awk
split
csplit
Аравиндом
источник
источник
split --help
?Ответы:
Самый простой способ, вероятно, использовать
head
иtail
:Это поместит первые 1000 строк
input-file
вoutput1
, а все строки от 1001 до конца вoutput2
источник
Я думаю, что
split
это ваш лучший подход.Попробуйте использовать
-l xxxx
параметр, где xxxx - это количество строк, которое вы хотите в каждом файле (по умолчанию 1000).Вы можете использовать эту
-n yy
опцию, если вас больше беспокоит количество создаваемых файлов. Использование-n 2
разделит ваш файл только на 2 части, независимо от количества строк в каждом файле.Вы можете посчитать количество строк в вашем файле с помощью
wc -l filename
. Это команда «wordcount» с опцией lines.Ссылки
man split
man wc
источник
split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
.Это работа для
csplit
:будет
s
разбитinfile
на части, первая частьxx00
- до, но не включая строку 1001, а вторая частьxx01
- оставшиеся строки.Вы можете поиграть с опциями, если вам нужны разные имена выходных файлов, например, используя
-f
и указав префикс :производит два файла с именем
piece.00
иpiece.01
Со смартом
head
вы также можете сделать что-то вроде:источник
csplit
. Очень хорошо. (Я просто читаю список команд POSIX, и у меня возникли огромные проблемы, когда яcsplit
сначала обдумывал назначение команды. Оказывается, это действительно очень просто.) :)Простой способ сделать то, что требует вопрос, в одной команде:
или для тех из вас, кто действительно ненавидит вводить длинные интуитивно понятные команды,
источник