是否可以指示您的输出文件与输入文件具有相同的名称,即覆盖?

时间:2010-12-09 14:24:45

标签: awk unix

由于我系统中的磁盘空间有限,我想用输出文件的相同名称覆盖输入文件的名称。可能吗?我知道这不推荐,但我已经备份了输入文件。我将在shell中有一个循环来执行cut命令。

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

4 个答案:

答案 0 :(得分:3)

您可以随时使用您重定向的临时文件,然后当您确定一切正常时,将其重命名为原始文件。

答案 1 :(得分:2)

某些gnu utils命令有一个-i选项(例如sed),允许你在适当的位置更改文件.....大多数文件过滤和编辑(如cut)可以使用sed完成。

答案 2 :(得分:1)

shell将解析命令并首先处理重定向。当它看到“> afile”时,它将截断“afile”并打开它进行写入。您的数据现已被销毁。 然后 shell将文件名传递给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

尽可能长时间地保留原始数据。

如果您遇到磁盘空间问题,则必须完全将输入文件读入内存。

答案 3 :(得分:0)

如果磁盘空间非常有限(磁盘配额),您可以尝试将压缩源文件放在ram(/dev/shm)中并将其用作源(将其解压缩到stdout并将其传递给脚本)