Если Вы ищете что-то легкое, и легкое для установки sshfs является безусловно самым легким настроить. Sshfs монтирует удаленные каталоги через ssh и представляет их как локально смонтированные каталоги и файлы. Это звучит более сложным, чем это на самом деле удается, чтобы быть.
Сначала удостоверьтесь, что у Вас есть sshfs, установленный в системе, где Вы будете желать создать, монтируется. Например, скажите, что у меня есть свой ноутбук и удаленный сервер. Я установил бы sshfs
на моем ноутбуке так, чтобы я мог смонтировать каталоги локально на нем от удаленного сервера.
$ sshfs sam@skinner:/home/sam/docs ~/far_projects
$ ls -l ~/far_projects/
total 1260
drwxr-x--- 1 5060 users 4096 Mar 30 2004 acronyms
drwxr-xr-x 1 5060 users 4096 Nov 16 2008 articles
drwxr-xr-x 1 5060 users 4096 Nov 16 2008 bookmark_repository
drwxr-xr-x 1 5060 users 4096 Oct 14 2009 books
drwxr-xr-x 1 5060 users 4096 Nov 15 2008 cheatsheets
-rw-r--r-- 1 5060 users 6855 Feb 19 2009 cheatsheet.txt
Когда Вы сделаны с монтированием, можно использовать команду fusermount
размонтировать его.
$ fusermount -u ~/far_projects
$ ls ~/far_projects/
$
В эти типы монтирования можно даже интегрировать /etc/fstab
.
Сортировке понадобится место на жестком диске для хранения временных данных. /tmp не лучшее место.
Команда сортировки хранит рабочие данные во временных дисковых файлах.
Вы можете использовать флаг -T для указания большого временного dir (на разделе с большим количеством свободного места).
Я нашел путь на OpenBSD:
http://www.openbsd.org/cgi-bin/man.cgi/openbsd-current/man1/sort.1?query= Сортировка & sec = 1
-H
Use a merge sort instead of a radix sort. This option should be used for files larger than 60MB.
Но это не полностью нормальное решение, так как он занимает слишком много места ... x> 100 Гбайт не достаточно для этого ..
Другая возможность будет сортировать каждый из файлов отдельно, а затем объединить их:
for f in *txt; do
sort -u "$f" -T tmp/ > "$f".sorted
done
sort -mu *sorted
Опция -M
Сортировать
отсортированные файлы вместо попытки отсортировать их. Это должно привести к гораздо более низкому использованию памяти и следует избегать SegFault.
В прошлом я должен был сортировать файлы, которые слишком велики для сортировки
. Я предполагаю, что это также ваша проблема, хотя, если вы предоставляете больше информации, возможно, мы можем лучше диагностировать вашу проблему.
Решение моей проблемы заключалась в том, чтобы разбить файл с GREP
в качестве предварительно процессора. Посмотрите на ваши данные, чтобы увидеть, где будут комки. Я предполагаю, что это прилично распространяется над буквенно-цифровым пространством, но я буду обсуждать, как бороться с комками позже.
for char1 in other {0..9} {a..z}; do
out="/tmp/sort.$char1"
echo "Extracting lines starting with '$char1'"
if [ "$char1" = "other" ]; then char1='[^a-z0-9]'; fi
grep -i "^$char1" *.txt > "$out"
sort -u "$out" >> output.txt || break
done
(Это использует басизм. Чтобы избежать его, явное назвать каждый из 37 символов, как для Char1 в другом 0 1 2 3 4 5 6 7 8 9 0 ABCDEF ...
)
Clumps: Полностью возможно, что некоторые из этих петлей сортировка
вызовы, будут вызовываться из-за иметь слишком много данных. Просто пересматривайте, что итерация, чтобы быть более разбитым на части. Это может быть так же просто, как удаление флага GreeP -I
и вызов каждой заглавной буквы (не забудьте изменить другой
на [^ a-za-z0- 9]
) или может потребовать копаться в данные. Если это список пакетов программного обеспечения, у вас может быть слишком много строк, начнут с «lib», и поэтому /tmp/sort.l
итерация не удастся. || Break
Часть этого цикла прекратит обработку в этой точке, чтобы вы могли ее исправить и резюме, где вы остановились. После примера «lib» вы можете возобновить с чем-то вроде этого:
for char1 in 'l[a-h]' 'lia' lib{a..z} lib{0..9} 'li[c-z]' 'l[j-z]' {m..z}; do
...
Это разбивает список L
в детали до и после части lib *. Это немного уродливо, но это должно работать. Просто обратите внимание на желаемый заказ, чтобы вы могли сохранить его.
Объединение разных ответов: Когда вы хотите отсортировать файл на куски, попробуйте использовать Split:
LARGETMP=/var/tmp
mkdir ${LARGETMP}
N_LINES=100000 # Adjust when to still too large or too small
split --lines=${N_LINES} bigfile splitted_
for small in splitted*; do
sort -u -T ${LARGETMP} ${small} > sorted_${small}
rm ${small}
done
echo "Done with sorting the splitted files, now concate the stuff"
sort -um -T ${LARGETMP} sorted_* > bigfile.sorted
Редактировать:
AS @ UA2B прокомментировал, разделение по размеру в основном будет разделена в середине линий.
(Когда файл не имеет линейных шин, вся идея сортировки немного странно).