Как вид UNIX мог управлять видом очень большой файл?

Где диапазон - несколько ячеек:

Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,3]);

Где диапазон - одна ячейка:

Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.Cells[1, 1];
97
задан kojiro 23 July 2013 в 19:41
поделиться

4 ответа

Алгоритмические детали команды UNIX Sort говорят, что Unix Sort использует внешний алгоритм сортировки слиянием R-Way. Ссылка дает более подробную информацию, но по сути она делит ввод на более мелкие части (которые помещаются в память), а затем объединяет каждую часть вместе в конце.

107
ответ дан 24 November 2019 в 05:26
поделиться

Команда sort сохраняет рабочие данные во временных файлах на диске (обычно в / tmp ).

42
ответ дан 24 November 2019 в 05:26
поделиться

Я не знаком с программой, но думаю, что это делается с помощью внешней сортировки (большая часть проблемы хранится во временных файлах, тогда как относительно небольшая часть проблемы хранится в памяти вовремя). См. Дональд Кнут Искусство компьютерного программирования, Vol. 3 Сортировка и поиск, раздел 5.4 для очень глубокого обсуждения предмета.

11
ответ дан 24 November 2019 в 05:26
поделиться

ПРЕДУПРЕЖДЕНИЕ: Этот сценарий запускает одну оболочку для каждого фрагмента, для действительно больших файлов их может быть сотни.


Вот сценарий, который я написал для этой цели. На 4-процессорной машине производительность сортировки улучшилась на 100%!

#! /bin/ksh

MAX_LINES_PER_CHUNK=1000000
ORIGINAL_FILE=$1
SORTED_FILE=$2
CHUNK_FILE_PREFIX=$ORIGINAL_FILE.split.
SORTED_CHUNK_FILES=$CHUNK_FILE_PREFIX*.sorted

usage ()
{
     echo Parallel sort
     echo usage: psort file1 file2
     echo Sorts text file file1 and stores the output in file2
     echo Note: file1 will be split in chunks up to $MAX_LINES_PER_CHUNK lines
     echo  and each chunk will be sorted in parallel
}

# test if we have two arguments on the command line
if [ $# != 2 ]
then
    usage
    exit
fi

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null
rm -f $SORTED_FILE

#Splitting $ORIGINAL_FILE into chunks ...
split -l $MAX_LINES_PER_CHUNK $ORIGINAL_FILE $CHUNK_FILE_PREFIX

for file in $CHUNK_FILE_PREFIX*
do
    sort $file > $file.sorted &
done
wait

#Merging chunks to $SORTED_FILE ...
sort -m $SORTED_CHUNK_FILES > $SORTED_FILE

#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null

См. Также: « Сортировка больших файлов быстрее с помощью сценария оболочки »

13
ответ дан 24 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

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