Нужно ли создавать второй файл для сортировки файла? - PullRequest
8 голосов
/ 02 февраля 2012

Я хочу отсортировать кучу файлов.Я могу сделать

sort file.txt > foo.txt
mv foo.txt file.txt

, но нужен ли мне второй файл?

(я, конечно, пробовал sort file.txt > file.txt, но потом я просто получил пустой файл.)

Ответы [ 5 ]

12 голосов
/ 02 февраля 2012

Попробуйте:

sort -o file.txt file.txt

См. http://ss64.com/bash/sort.html

`-o OUTPUT-FILE'
     Write output to OUTPUT-FILE instead of standard output.  If
     OUTPUT-FILE is one of the input files, `sort' copies it to a
     temporary file before sorting and writing the output to
     OUTPUT-FILE.
1 голос
/ 02 февраля 2012

Поскольку вы записываете обратно в один и тот же файл, у вас всегда будет проблема с перенаправлением, открывающим выходной файл до того, как сортировка завершит загрузку оригинала.Так что да, вам нужно использовать отдельный файл.

Теперь, сказав, что есть способы сначала буферизовать весь файл в поток данных, но обычно вы этого не захотите, хотя это и так.возможно, если вы напишете что-нибудь для этого.Но вы будете вставлять специальные инструменты в начале и в конце для буферизации.Bash, однако, откроет выходной файл слишком рано, если вы используете его перенаправление >.

1 голос
/ 02 февраля 2012

Философия классических инструментов Unix, таких как sort, заключается в том, что с их помощью вы можете построить трубу. Каждый маленький инструмент читает из STDIN и пишет в STDOUT. Таким образом, следующий маленький инструмент вниз по трубе может прочитать вывод первого как ввод и действовать на него.

Так что я бы сказал, что это ошибка, а не функция.

Пожалуйста, прочитайте также о P ipes, Redirection и Filters в очень хорошей книге ESR.

0 голосов
/ 23 февраля 2016

Если вы имеете дело с сортировкой записей фиксированной длины из одного файла, то алгоритм сортировки может поменять записи внутри файла.Есть несколько доступных алгоритмов.Ваш выбор будет зависеть от количества свойств случайности файла.Как правило, быстрая сортировка имеет тенденцию менять местами наименьшее количество записей и обычно является сортировкой, которая завершается первой по сравнению с другими алгоритмами сортировки.

0 голосов
/ 02 февраля 2012

Да, вам нужен второй файл! Команда

sort file.txt > file.txt

будет иметь команду bash для установки перенаправления stout, прежде чем он начнет выполнять sort. Это определенный способ заглушить ваш входной файл.

Если вы хотите отсортировать много файлов, попробуйте:

cat *.txt | sort > result.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...