Сортировать миллионы текстовых файлов в папке, используя сортировку Unix

Я пытаюсь отсортировать множество файлов (миллионов, т.е. около 2,5 м) .txt в папку с именем NZParsed.

Все файлы в папке называются как 1.txt 2.txt и так далее до 25xxxxx.txt

После выполнения следующей команды в eclipse:

os.system("sort -k1,1 -k3,3n -k4,4n -y 1048576 /home/viraj/NZ/NZParsed/* -o /home/viraj/NZ/SplitIndex/abcd.txt")

Я получаю ошибка:

sh: 1: sort: Argument list too long

Может кто-нибудь сказать мне, как я мог бы отсортировать все эти файлы в 1 файл и разделить их, используя следующую команду в eclipse:

os.system("split -C 200m /home/viraj/NZ/SplitIndex/abcd.txt /home/viraj/NZ/SplitIndex/")
4
задан 19 March 2014 в 05:01

1 ответ

Проблема не имеет никакого отношения к затмению или Python. Вы поражаете предел ARG_MAX, поскольку больше деталей видит здесь , но кратко, это - предел того, каким количеством байтов список аргументов команде может быть.

Так, для предотвращения этого Вам нужно к sort способом, который не перечисляет файлы. Например:

for i in /home/viraj/NZ/NZParsed/*; do cat "$i" ; done |
    sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt

команда выше желания cat каждый файл и затем передают содержание всех файлов через Ваш sort команда. Тем путем файлы никогда не перечисляются, и Вы не будете иметь ARG_MAX проблема.

Другой подход должен был бы использовать находку -exec опция:

find /home/viraj/NZ/NZParsed/ -type f -name '[0-9]*.txt' -exec cat {} + | 
    sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt
0
ответ дан 19 March 2014 в 05:01

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

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