В прошлом я должен был сортировать файлы, которые слишком велики для сортировки
. Я предполагаю, что это также ваша проблема, хотя, если вы предоставляете больше информации, возможно, мы можем лучше диагностировать вашу проблему.
Решение моей проблемы заключалась в том, чтобы разбить файл с 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 *. Это немного уродливо, но это должно работать. Просто обратите внимание на желаемый заказ, чтобы вы могли сохранить его.
Насколько я понимаю, есть проблема с fdupes
команда, которая выводит пустую строку в конце:
[PRD][]localhost:~ 12:17:09
$ fdupes -r work/
work/sockperf-sockperf_v2/news
work/sockperf-sockperf_v2/src/.dirstamp
work/sockperf-sockperf_v2/src/.deps/.dirstamp
[PRD][]localhost:~ 12:17:19
Затем при обработке в цикле последний элемент остается пустым, что вызывает ошибку в md5sum
, как когда файл не существует:
$ md5sum ' '
md5sum: : no such file of directory
И затем сценарий пытается переместить этот пустой файл имен, что также приводит к ошибке mv
.