2013-12-05 4 views
1

У меня есть файл 500 Мб, который я пытаюсь манипулировать с помощью sed.Почему sed выводит все сразу?

Все работает нормально, я заметил, что он читает и обрабатывает все в памяти, а затем выводит все сразу. Является ли это естественным поведением для файла такого размера?

Я ожидал, что он выведет каждую строку после окончания и продолжит переход к следующей.

ответ

1

на некоторой версии sed вы можете использовать опцию -u для работы в потоковой версии.

AIX СЭД

-u

нагрузки минимальное количество данных из входных файлов и сбрасывайте выходные буферы чаще

GNU СЭД

-u' - -небуферизованный '

Buffer both input and output as minimally as practical. (This is 
particularly useful if the input is coming from the likes of `tail 
-f', and you wish to see the transformed output as soon as 
possible.) 
1

Существуют различные «режимы» буферизации, которые можно использовать; обычно вывод строки с буфером используется, когда выход идет на терминал (какие программы могут обнаруживать на isatty(STDOUT_FILENO)). Я предполагаю, что вы запускаете свой sed-скрипт и многократно просматриваете вывод и замечаете, что он выглядит как «все сразу». Это не значит, что sed загружает все в память - sed - это ориентированная на линию программа, и почти наверняка она обрабатывает ваш вход по очереди. Если вывод sed является файлом, это нормально и ожидается, что файл будет заполнен большими кусками, потому что он более эффективен таким образом, когда никто, кажется, не смотрит на результат (опять же, потому что isatty возвращает false).

Смежные вопросы