Разделите большой файл, имейте произвольный индекс запуска

Я делаю большое управление файлом в моей системе, и в одном конкретном пакетном задании я заканчиваю с файлом приблизительно на 16 Гбит. Я должен подготовить эти данные в меньшие блоки для другого процесса.

Я разделил его на 10k строки на файл и числовой индекс, дополненный к 5 цифрам

split -a 5 -d -l 10000 large_input_file /out_path/out.

Таким образом, я заканчиваю с названными файлами
00000
00001
...

Проблема состоит в том, что этот способ индексировать всегда запускается с 0.
Существует ли способ установить его на произвольное начальное значение индекса? человек ничего не показывает...

2
задан 1 January 2011 в 17:01

2 ответа

Это не имеет большого значения перенумеровать файлы потом.

split -a 5 -d -l 10000 large_input_file /out_path/tmp.
for x in /outpath/tmp.*; do
  mv -i -- "$x" "${x%/*}/out.$(printf %05d $((10#${x##*.}+1)))";
done

Обратите внимание на несколько подводных камней:

  • Наивный подход переименования out.00000 в out.00001 и т. Д. Не работает, потому что глобализация расширяется до лексикографически упорядоченного списка, поэтому первое переименование перезапишет второй файл. В zsh вы можете использовать спецификатор glob (On). В других оболочках самый простой способ - также изменить название ствола.
  • Ведущий 0 в арифметике оболочки приводит к тому, что число интерпретируется в восьмеричном. 10#${…} вызывает десятичную интерпретацию.
  • printf %05d - это способ сохранить отступ до 5 цифр.
0
ответ дан 1 January 2011 в 17:01

Я думаю, что эта опция не существует в сплите. У меня есть этот баг (запрос на будущее) для coreutils - http://savannah.gnu.org/bugs/?22231

0
ответ дан 1 January 2011 в 17:01

Другие вопросы по тегам:

Похожие вопросы: