排序管道会删除文件

时间:2014-09-27 07:46:14

标签: linux shell unix

执行命令cat mydata.txt | sort | uniq | > mydata.txt后,为什么mydata.txt文件为空?

1 个答案:

答案 0 :(得分:2)

答案是|> mydata.txt之间的空白,将uniq的输出传送到任何内容并将其发送到文件。

即使您在最后一个|之后有一个命令,它仍然会在读取时写入mydata,这很糟糕,可能会删除大部分内容。

在Linux shell中,命令的管道不会按顺序执行。全部同时执行,并且一个命令的输出附加到下一个命令的输入。

您可以使用toppstree

等实用程序,通过查看其他终端窗口中的计算机运行情况来确认同步操作

因此,正如评论者建议的那样,您应该使用临时文件作为输出。创建输出后,将其移回原始名称,然后删除它。

像这样:

cat mydata.txt | sort | uniq > tmp-mydata.txt
mv tmp-mydata.txt mydata.txt

或者@tripleee建议,sort命令已经具有uniq功能,可以使用此命令:

sort -u -o mydata.txt mydata.txt

通常,写入您正在读取的文件是不安全的,但也许这里排序是在内部存储。