我有两个文件,其中包含一些名称,当我运行时cat file1 file2 | sort
,终端显示按字母顺序排序的名称,但是当我运行时,cat file1 file2 > file3 | sort
我看不到排序的输出,为什么?
答案1
您已经将file1
和的输出重定向file2
到新文件file3
。
使用此命令cat file1 file2 > file3 | sort
,sort
在管道之后。
这可以如下验证。
cat file1
A
Z
B
cat file2
F
G
C
现在,当我运行命令时,我们可以看到和cat file1 file2 > file3 | sort
的内容已写入,但未排序。file1
file2
file3
我相信你想要实现的目标可以很容易地实现,因为,
cat file1 file2 | sort > file3
但是,它不会在控制台窗口中显示输出。
如果您需要将排序后的两个文件的输出写入新文件,同时排序后的输出可在控制台中使用,您可以执行如下操作。
cat file1 file2 | sort > file3; cat file3
tee
不过,在这种情况下使用它是很好的。tee
可以有效地用作,
cat file1 file2 | sort | tee file3
上面的命令基本上连接了 2 个文件并对它们进行排序并在控制台中显示输出,同时将管道的输出写入使用命令指定的新文件tee
。
作为用户凯西指出,如果您zsh
的系统上有可用的 shell,您也可以使用以下命令。
sort <file1 <file2 | tee file3
答案2
POSIX 定义该sort
实用程序的用途如下:
对所有指定文件的行进行排序并将结果写入指定的输出。
您可以将两个文件排序为一个串联的输出文件,例如:
sort $opts file1 file2 >output_file
如果你想在你的 shell 上看到输出stdout
和将结果保存在输出文件中,然后使用tee
:
sort $opts file[12] | tee output_file