Простой
sort -u *.db > uniquified # adjust glob as needed
должен это сделать;sort
будет вставлять новые строки между файлами, если это будет необходимо.
cat *.db | sort -u
- это классический UUoC , и проблема с файлами, в которых отсутствуют завершающие символы новой строки, - не единственная проблема.
Сказав это, 25 ГБ, вероятно, не поместится в вашей оперативной памяти, поэтому sort
в конечном итоге приведет к созданию временных файлов.Может оказаться быстрее отсортировать файлы в четыре или пять групп, а затем объединить результаты.Это могло бы лучше использовать большое количество дубликатов.Но я бы только экспериментировал, если бы простая команда действительно занимала непомерное количество времени.
Несмотря на это, сортировка файлов по отдельности, вероятно, еще медленнее;обычно лучшим вариантом является максимальное использование ресурсов памяти для каждого вызова sort
.Например, вы можете использовать xargs
с опцией -n
, чтобы разбить список файлов на группы по пару десятков файлов в каждой.После сортировки каждой группы вы можете использовать sort -m
для объединения отсортированных временных файлов.
Несколько замечаний о том, как улучшить скорость сортировки:
Использование LC_COLLATE=C sort
, если вам не нужна сортировка буквенных данных с учетом локали.Обычно это ускоряет сортировку в три-четыре раза.
Избегайте использования RAM-дисков для временного пространства.(Во многих дистрибутивах Linux /tmp
является диском ОЗУ.) Поскольку sort
использует временные диски, когда у него заканчивается ОЗУ, размещение временного диска в RAM-диске неэффективно.По той же причине не помещайте свои собственные временные выходные файлы в /tmp
./var/tmp
должен быть реальный диск;еще лучше, если это возможно, использовать второй дисковод (конечно, не медленный USB-накопитель).
Избегайте чрезмерной подкачки вашей машины во время сортировки,выключив swap:
sudo swapoff -a
Вы можете включить его потом, хотя я лично все время так запускаю свою машину, потому что она избегает погружения в полную безответность под давлением памяти.
В идеале нужно настроить -S
таким образом, чтобы sort
использовал столько памяти, сколько вы можете сэкономить, и избегал использования внутренних временных файлов, сортируя куски, которые помещаются в этот объем памяти.(Объединение отсортированных чанков происходит намного быстрее, чем сортировка, и оно читает и записывает последовательно, не занимая дополнительное место на диске.) Вам, вероятно, придется провести некоторые эксперименты, чтобы найти хороший размер чанка.