LINUX.ORG.RU

Замещение файла другим

 , ,


1

2

Есть такое задание:

Написать программу-фильтр overwrite, которая направляет входной поток во временный файл. Когда поток входных данных иссякнет, временный файл переименовывается в имя, заданное параметром overwrite. Например, вызов

sort data.txt| overwrite data.txt
должен означать следующую последовательность операций: отсортированные строки файла data.txt помещаются во временный файл, временный файл замещает исходный файл data.txt. При вызове overwrite с двумя параметрами первый из них должен рассматриваться как имя программы, а второй как имя файла данных. Таким образом, должно быть возможным использовать вызов
overwrite sort data.txt
вместо приведенной выше «трубы».

Как заменить один файл другим? А так же не могли бы вы написать как примерно должна выглядеть программа?

Не знаю, то что нужно или нет, но есть sponge из пакета moreutils

sort file.txt | sponge file.txt
Deleted
()
Ответ на: комментарий от Kroz

$ sort -o data.txt data.txt

А ведь на самом деле да.

loweshv, передайте преподавателю, что пример он выбрал крайне неудачный — в силу самой сути сортировки sort(1) поточным фильтром *не* является — он читает поток до конца прежде, чем начинать писать, и соответственно проблеме, какую вам задали решить, не подвержен.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 2)

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

cat - >data.txt; 
sort -o data.txt data.txt
loweshv
() автор топика
Ответ на: комментарий от loweshv

чтобы после ввода данных sort начала их сортировать

$ sort
Zmicier ★★★★★
()

sort data.txt| overwrite data.txt

#!/bin/sh
cat > .$$.tmp
mv .$$.tmp "$1"

overwrite sort data.txt

#!/bin/sh
"$1" "$2" > .$$.tmp
mv .$$.tmp "$2"
futurama ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.