Как отсортировать файл на месте

67

Когда мы используем команду sort file файл показывает свое содержимое в порядке сортировки, что, если я не хочу получать какой-либо вывод, кроме отсортированного файла?

  • 0
    Пожалуйста, обновите свой вопрос, чтобы четко объяснить, что вы хотите сделать с результатом сортировки файла. Вы хотите отсортировать его на месте, заменив несортированное содержимое file на отсортированное содержимое того же файла? То, как ваш вопрос сформулирован в настоящий момент, вообще ничего не делать - это правильный ответ (вы не хотите ничего выводить, поэтому ничего не делайте).
  • 0
    @KeithThompson спасибо за вашу заботу на самом деле, я пытался отсортировать файл, но хочу избежать вывода на экран.
Показать ещё 4 комментария
Теги:

2 ответа

143
Лучший ответ

Вы можете использовать перенаправление файлов для перенаправления отсортированного вывода:

sort input-file > output_file

Или вы можете использовать опцию -o сортировки для указания одного и того же файла ввода и вывода:

sort file -o file

Примечание.. Общей ошибкой является попытка перенаправить вывод на тот же входной файл (например, sort file > file). Это не работает, так как оболочка выполняет перенаправления (а не программу sort (1)), и входной файл (как вывод также) будет удален, прежде чем давать сортировку ( 1) запрограммировать возможность его чтения.

  • 50
    Хорошая заметка об общей ошибке
  • 1
    Это очень удобно, когда вам нужно вручную редактировать словари для LaTeX, +1
Показать ещё 2 комментария
25

Команда sort выводит результат операции сортировки на стандартный вывод по умолчанию. Чтобы добиться "на месте", вы можете сделать это:

sort -o file file

Это перезаписывает вход file с отсортированным выводом. Переключатель -o, используемый для указания вывода, определяется POSIX, поэтому должен быть доступен для всех версий sort:

-o Укажите имя выходного файла, который будет использоваться вместо стандартного вывода. Этот файл может быть таким же, как один из входных файлов.

Если вам не хватает версии sort без переключателя -o (Luis уверяет меня, что они существуют), вы можете достичь "на месте" редактировать стандартным способом:

sort file > tmp && mv tmp file
  • 2
    Нет, они могут быть недоступны в версиях сортировки, несовместимых с POSIX (есть некоторые). Если вам нужно отсортировать по одному и тому же файлу, просто выполните sort filea >fileb; mv -f fileb filea .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню