标准输出重定向不起作用

标准输出重定向不起作用

Department.txt 包含列作为 ID,部门,我在下面使用将顺序更改为部门,ID 在此输入图像描述

但是如果我进一步将命令更新为下面的 在此输入图像描述

然后department.txt就变成空的,没有任何输出。如果我使用其他文件而不是我正在读取的同一文件,那么它就可以工作。

我知道我正在阅读和更新同一个文件,但根据我的理解是 |应该照顾它,因为在内部它必须将输出存储在内存中的某个位置并将其转储到我要求的文件中。不是吗?有人可以深入了解它是如何工作的吗?

注意:我知道有很多类似的问题,但没有一个真正回答了内部如何|工作,这是我需要答案的基本问题。

答案1

不,管道不处理它。管道不会按顺序运行两个命令并将第一个命令的输出存储在内存中。这两个程序同时运行,并使用称为管道的特殊 I/O 设备进行连接。但在启动程序之前,shell 会设置所有 I/O 重定向,这意味着它会打开输出文件并截断​​它。

如果你有 GNU awk,你可以使用它inplace覆盖输入文件的选项。

gawk -i inplace -F'\.' -v OFS=. '{print $2, $1}' department.txt

相关内容