2017-02-21 29 views
1

У меня есть большой (1,8 ГБ) файл, который я хочу разделить на файлы размером не более 100 МБ. Для этого я использую функцию разделения GNU, с опцией -d. Получающиеся числовые суффиксы являются странными. До 89, все хорошо, но тогда это начинается с 9000, затем 9001, ... и так далее. У кого-нибудь есть идея, почему я получаю это странное поведение?Неверный числовой суффикс с использованием GNU split

+0

Какая именно команда вы используете? А какие файлы уже существуют в каталоге? –

+0

Я смог воспроизвести проблему. Создал текстовый файл с 100000 строк и разделил его на 'split -d -l 1000 delme.txt delme_', и это создает файлы' delme_00' через 'delme_89' и' delme_9000' через 'delme_9009'. сплит-версия - 8,25 – chw21

ответ

5

Это может быть неожиданностью split, но это intended this way.

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

Лексический порядок необходимо легко обратить разделенным с помощью кошки:

split foo bar_ 
cat bar_* > foo 

Если лексический порядок не были сохранены, новый foo будет перемешалось.

Для достижения непрерывных чисел в качестве суффикса вы можете добавить аргумент -a <n>, где <n> - это количество цифр.

Следующая команда будет создавать файлы через foo_199:

seq 20000 | split -d -a 3 -l 100 - foo_ 

Однако, то это до вас, чтобы выбрать ряд достаточно большие, чтобы иметь возможность создавать все суффиксы необходимых цифр, в противном случае split команда с преждевременно прекратить с сообщением об ошибке:

split: output file suffixes exhausted 

проблема с тех пор была включена в GNU Coreutils gotchas страницу