覆盖文件的标准程序通常如下:
awk '{print $2*3}' file > tmp file
tmpFile > file
然而,有时这会带来一些麻烦,因为必须在不再使用临时文件后删除它。
那么,为什么不能以下列方式执行此操作(不需要临时文件):
awk '{print $2*3}' file > file
我问的原因是因为我知道可以这样附加到文件:
awk '{print $2*3}' file >> file
因此,如果使用上面显示的>>
附加文件,工作正常,为什么不能以相同的方式覆盖文件。为什么这两个命令如此不同?
此外,是否存在绕过对临时文件的需求的方法(可能采用类似于第二段摘录的方式),或者是第一个摘录的唯一途径?
注意:awk命令无关紧要,可以用任何其他命令替换
答案 0 :(得分:1)
使用临时文件是一个好主意,因为您永远无法确定整个文件是否会被读入内存。如果您在阅读之前尝试编写它,那么您可能会得到与您预期不同的结果。
使用append时,命令总是在添加新内容之前遍历整个文件,因此永远不会有文件的一部分要读取。
答案 1 :(得分:1)
可能不是一个好主意(尝试阅读和写入相同的文件),但如果你坚持这样做,你可以使用<>
运算符。
gawk '{print $2*3}' -- <> file