Bash排序重定向

时间:2013-11-10 19:30:38

标签: linux bash

sort file1 -o file2sort file1 > file2之间有什么区别?到目前为止,我做了同样的事情,但也许我错过了一些东西。

3 个答案:

答案 0 :(得分:4)

只要file1file2不同,以下两个命令就相似。

sort file1 -o file2    # Output redirection within sort command
sort file1 > file2     # Output redirection via shell

让我们看看输入和输出文件相同file时会发生什么,即您尝试就地排序

sort file -o file      # Works perfectly fine and does in-place sorting
sort file > file       # Surprise! Generates empty file. Data is lost :(

总之,以上两种重定向方法相似但不相同

测试

$ cat file
2
5
1
4
3
$ sort file -o file
$ cat file
1
2
3
4
5
$ sort file > file
$ cat file
$ ls -s file
0 file

答案 1 :(得分:2)

结果相同但在-o file2的情况下,结果文件由sort直接创建,而在另一种情况下,它由bash创建并填充标准输出sort。 coreutils中xfopen第450行中定义的sort.c同等对待这两种情况(stdout-o filename)。

重定向sort的标准输出更为通用,因为它可以重定向到另一个程序,而|代替> -o选项更难做(但并非不可能)

-o选项对于就地排序很方便,因为重定向到同一文件会导致截断文件,因为它是在调用sort之前由shell创建(并截断)的

答案 2 :(得分:1)

没有太大区别>是标准的unix输出重定向功能。也就是说'将您将在终端上显示的输出写入给定文件'-o选项更具体于sort函数。这是一种再次说“将输出写入此给定文件”的方法

>可以在工具没有专门具有写入文件参数或选项的情况下使用。