如何将命令的输出通过管道传输到两个单独的命令并存储输出

如何将命令的输出通过管道传输到两个单独的命令并存储输出

我有一个非常长的命令,运行在一个巨大的文件上,我被迫运行它两次,这使得运行时间加倍。

这就是我现在正在做的事情:

x=$(command | sort -u)
y=$(command | sort -n)

我想知道是否有任何方法可以将命令的输出重定向到sort -uand ,sort -n并将每个命令的输出存储到单独的变量或文件中,就像我上面使用xand所做的那样y

我尝试使用 tee 执行以下操作,但没有成功:

command | tee >(sort -n > x.txt) >(sort -u > y.txt)

我尝试将输出重定向到文本文件,但它只是将其打印到标准输出。

有什么建议或想法吗?

答案1

你真的很接近

command | tee >(sort -n >/tmp/x.txt) | sort -u >/tmp/y.txt

如果您好奇,该>( ... )操作将被替换为描述符管道的路径(例如/dev/fd/1234),因此生成的管道具有这种形状,并附/dev/fd/1234加到其他sort命令

command | tee /dev/fd/1234 | sort > /path/to/elsewhere

sorted 输出捕获到变量中(来自评论,不是来自问题)

var=$(command | tee >(sort -n > x.txt) >(sort -u > y.txt) | sort -u)

相关内容