我有两个文件,yolo.txt
和bar.txt
:
yolo.txt:
a
b
c
跳回到bar.txt:
c
我有以下命令,它可以获得所需的输出:
$ cat yolo.txt bar.txt | sort | uniq -u | sponge
a
b
但是当我添加重定向(>
)语句时,输出会改变:
$ cat yolo.txt bar.txt | sort | uniq -u | sponge > yolo.txt && cat yolo.txt
c
我预计输出会保持不变,我很困惑。请帮帮我。
答案 0 :(得分:3)
> yolo.txt
shell重定向发生在任何命令运行之前。特别是,在执行yolo.txt
之前,shell会打开cat yolo.txt bar.txt
来编写并将其截断。因此,当cat
打开yolo.txt
时,yolo.txt
为空。因此c
中的bar.txt
行是唯一的,因此uniq -u
会将其传递出来。
我想你想使用sponge
来避免这个问题,因为那是sponge
的用途。但是你错误地使用了它。这是正确的用法:
cat yolo.txt bar.txt | sort | uniq -u | sponge yolo.txt && cat yolo.txt
请注意,我只是将输出文件名作为命令行参数传递给sponge
,而不是使用shell重定向。