执行命令cat mydata.txt | sort | uniq | > mydata.txt
后,为什么mydata.txt文件为空?
答案 0 :(得分:2)
答案是|
和> mydata.txt
之间的空白,将uniq的输出传送到任何内容并将其发送到文件。
即使您在最后一个|
之后有一个命令,它仍然会在读取时写入mydata,这很糟糕,可能会删除大部分内容。
在Linux shell中,命令的管道不会按顺序执行。全部同时执行,并且一个命令的输出附加到下一个命令的输入。
您可以使用top
或pstree
因此,正如评论者建议的那样,您应该使用临时文件作为输出。创建输出后,将其移回原始名称,然后删除它。
像这样:
cat mydata.txt | sort | uniq > tmp-mydata.txt
mv tmp-mydata.txt mydata.txt
或者@tripleee建议,sort命令已经具有uniq功能,可以使用此命令:
sort -u -o mydata.txt mydata.txt
通常,写入您正在读取的文件是不安全的,但也许这里排序是在内部存储。