Я пытаюсь отсортировать множество файлов (миллионов, т.е. около 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/")
Проблема не имеет никакого отношения к затмению или 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