由于我系统中的磁盘空间有限,我想用与输出文件相同的名称覆盖输入文件的名称。有可能吗?我知道不推荐这样做,但我已经备份了输入文件。我将在shell中使用一个循环来执行cut命令。
#!/bin/bash
for i in {1..1000}
do
cut --delimiter=' ' --fields=1,3-7 input$i.txt > input$i.txt
done
发布于 2010-12-09 22:27:13
您可以始终使用重定向到的临时文件,然后当您确定一切正常时,将其重命名为原始文件。
发布于 2010-12-09 22:33:28
一些gnu utils命令有一个剪切选项(如sed),允许您在适当的位置更改文件,使用sed可以完成文件过滤和编辑(如.....most )。
发布于 2010-12-09 23:27:40
外壳将解析命令并首先处理重定向。当它看到"> 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
这将尽可能长时间地保持原始数据不变。
如果您有磁盘空间问题,则必须将输入文件完全读取到内存中。
https://stackoverflow.com/questions/4399245
复制相似问题