Существует стандартная команда для разделения файлов - split.
Например, если я хочу разбить файл слов на несколько частей по 10000 строк, я могу использовать:
split -dl 10000 words wrd
и он будет генерировать несколько файлов в формате wrd.01, wrd.02 и так далее.
Но я хочу иметь конкретное расширение для этих файлов - например, я хочу получить файлы wtd.01.txt, wrd.02.txt.
Есть ли способ сделать это?
Тогда это было недоступно, но с более поздними версиями (
≥ 8.16
)gnu split
можно использовать--additional-suffix
коммутатор для контроля над полученным расширением. Отman split
:поэтому при использовании этой опции:
результирующие куски будут автоматически заканчиваться на
.txt
:источник
gnu split
частиgnu coreutils
. Он также доступен в OSX, если вы устанавливаетеcoreutils
через,homebrew
но обратите внимание, что по умолчанию в OSXgnu
служебные программы имеютg
префикс перед своим именем (например,gstat
вместоstat
), поэтому вы вызываете его какgsplit
(или изменяете PATH согласно руководству здесь, если хотите). использовать его какsplit
поверх OSXsplit
). НТН.gsplit
чтобы заставить работать числовые суффиксы (-d).Такие задачи лучше всего решать с помощью оболочки. Используйте split, а затем напишите простой цикл, чтобы переименовать файлы. Например
переименовал бы ваши файлы wrd.01, wrd.02 и т. д., чтобы все они имели расширение .txt.
источник
split+mv
комбо более , что в 6 раз быстрее , чемawk
(примерно 3 сек против 18s ) для входного файла 10000000 линии (75 MB) ... текст в каждой строке была своя линия номер ... Спасибо за Перефразирование «очевидное» :)split + mv
в 75 раз быстрее, чемawk
: Когда в 100 раз больше файлов,split + mv
в 1,5 раза быстрее, чемawk
. Так что для меня этотsplit + mv
метод побеждает, руки вниз. Это как consice (возможно, более того), и быстрее, чемawk
.for file in wrd.*; do mv "$file" "$file.txt"; done
:)