1

sort file1 -o file2和 和有什么区别sort file1 > file2?到目前为止,从我所做的事情来看,他们做同样的事情,但也许我错过了一些东西。

4

3 回答 3

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
于 2013-11-10T19:55:05.023 回答
2

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

重定向的标准输出sort更通用,因为它可以用 a|代替 a重定向到另一个程序>,该-o选项使执行变得更加困难(但并非不可能)

-o选项对于就地排序很方便,因为重定向到同一文件将导致文件被截断,因为它是由 shell 在调用sort.

于 2013-11-10T19:57:46.593 回答
1

没有太大区别>的是标准的unix输出重定向功能。也就是说,“将您原本会在终端上显示的输出写入给定文件” -o 选项更特定于排序功能。这是再次说“将输出写入给定文件”的一种方式

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

于 2013-11-10T19:40:05.973 回答