如何将两个文件连接成一个新文件并对输出进行排序

如何将两个文件连接成一个新文件并对输出进行排序

我有两个文件,其中包含一些名称,当我运行时cat file1 file2 | sort,终端显示按字母顺序排序的名称,但是当我运行时,cat file1 file2 > file3 | sort我看不到排序的输出,为什么?

答案1

您已经将file1和的输出重定向file2到新文件file3

使用此命令cat file1 file2 > file3 | sortsort在管道之后。

这可以如下验证。

cat file1
A
Z
B
cat file2
F
G
C

现在,当我运行命令时,我们可以看到和cat file1 file2 > file3 | sort的内容已写入,但未排序。file1file2file3

我相信你想要实现的目标可以很容易地实现,因为,

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

相关内容