По крайней мере, с версией GNU Coreutils split
вы можете сделать это следующим образом:
split -l300 --numeric-suffixes=1 --suffix-length=1 --additional-suffix=".lst" file ""
Обратите внимание на использование ""
для указания пустого префикса (части xa
имени файла по умолчанию )и использование --numeric-suffixes
вместо -d
(, которое всегда начинается с 0 ).
Также обратите внимание, что это предполагает, что разделяемый файл содержит не более 9 x 300 строк -, в противном случае split
будет жаловаться, чтоoutput file suffixes exhausted
Пр.
$ split -l300 --numeric-suffixes=1 --suffix-length=1 --additional-suffix=".lst" --verbose file ""
creating file '1.lst'
creating file '2.lst'
creating file '3.lst'
creating file '4.lst'
Попробуйте это:
split --additional-suffix='.lst' -da3 -l 1024 list.lst ''
Причина перехода к9000
(для более чем 89 частей )заключается в том, что числовая длина по умолчанию равна 2
.
Измените с помощью опции -a
. Чтобы нумерация файлов оставалась числовой (и была монотонной (, всегда увеличивайте ))и используйте длину, превышающую максимальное значение возможного количества разбиений.
$ split -a 3 -d -l1024./list.lst
$ ls
list.lst x009 x019 x029 x039 x049 x059 x069 x079 x089 x099 x109 x119
x000 x010 x020 x030 x040 x050 x060 x070 x080 x090 x100 x110 x120
x001 x011 x021 x031 x041 x051 x061 x071 x081 x091 x101 x111 x121
x002 x012 x022 x032 x042 x052 x062 x072 x082 x092 x102 x112 x122
x003 x013 x023 x033 x043 x053 x063 x073 x083 x093 x103 x113 x123
x004 x014 x024 x034 x044 x054 x064 x074 x084 x094 x104 x114 x124
x005 x015 x025 x035 x045 x055 x065 x075 x085 x095 x105 x115 x125
x006 x016 x026 x036 x046 x056 x066 x076 x086 x096 x106 x116 x126
x007 x017 x027 x037 x047 x057 x067 x077 x087 x097 x107 x117 x127
x008 x018 x028 x038 x048 x058 x068 x078 x088 x098 x108 x118
Чтобы изменить x
, просто изменитеPREFFIX
(по умолчаниюx
)(после имени файла):
split -a 3 -d -l 1024 list.lst ''
Который будет называть файлы 000
. Чтобы получить завершающий .lst
, добавьте параметр --additional-suffix='.lst'
, короче говоря, используйте этот:
split --additional-suffix='.lst' -da3 -l 1024 list.lst ''
Если вам нужно, чтобы начальное числовое значение было 001
, используйте:
split --additional-suffix='.lst' --numeric-suffixes=1 -a 3 -l 1024 list.lst ''
Но нет, невозможно получить числовые значения, такие как 1,2,3,...,21,..,107 без переименования.
Переименование может решить все проблемы в два этапа с помощью простого цикла:
split -l 1024 -d -a 8 list.lst
for f in x[0-9]*; do
mv "$f" "$((10#${f#x}+1)).lst"
done