Можно ли направить выходной файл с тем же именем, что и входной файл, то есть перезаписать? - PullRequest
0 голосов
/ 09 декабря 2010

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

#!/bin/bash
for i in {1..1000}
do
    cut --delimiter=' ' --fields=1,3-7 input$i.txt > input$i.txt
done

Ответы [ 4 ]

3 голосов
/ 09 декабря 2010

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

2 голосов
/ 09 декабря 2010

некоторые команды gnu utils имеют опцию -i (например, sed), которая позволяет изменять файл на месте ..... большую часть фильтрации и редактирования файлов (например, вырезать) можно выполнить с помощью sed.

1 голос
/ 09 декабря 2010

Оболочка будет анализировать команду и обрабатывать перенаправления в первую очередь. Когда он видит «> afile», он усекает «afile» и открывает его для записи. Ваши данные теперь уничтожены. Затем оболочка передает имя файла на cut, которому теперь нечего читать.

Вот как я узнал:

some | pipeline < my_file > my_file.tmp
ln my_file my_file.bak   # this is a hard link
mv my_file.tmp my_file

Это позволяет сохранять исходные данные как можно дольше.

Если у вас проблемы с дисковым пространством, вам придется полностью прочитать входной файл в память.

0 голосов
/ 09 декабря 2010

В случае очень ограниченного дискового пространства (дисковой квоты) вы можете попытаться поместить сжатый исходный файл в оперативную память (/dev/shm) и использовать его в качестве источника (распаковывая его в стандартный вывод и передавая его в сценарий). 1002 *

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