我有一个非常长的命令,运行在一个巨大的文件上,我被迫运行它两次,这使得运行时间加倍。
这就是我现在正在做的事情:
x=$(command | sort -u)
y=$(command | sort -n)
我想知道是否有任何方法可以将命令的输出重定向到sort -u
and ,sort -n
并将每个命令的输出存储到单独的变量或文件中,就像我上面使用x
and所做的那样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
将sort
ed 输出捕获到变量中(来自评论,不是来自问题)
var=$(command | tee >(sort -n > x.txt) >(sort -u > y.txt) | sort -u)