Bash
如何將命令的輸出通過管道傳輸到兩個單獨的命令並儲存輸出
我有一個非常長的命令執行在一個巨大的文件上,我被迫執行它兩次,這使執行時間加倍。
這就是我目前正在做的事情:
x=$(command | sort -u) y=$(command | sort -n)
我想知道是否有任何方法可以將命令的輸出重定向到
sort -u
andsort -n
並將每個的輸出儲存到單獨的變數或文件中,就像我上面使用x
and所做的那樣y
。我嘗試使用 tee 執行以下操作,但沒有運氣:
command | tee >(sort -n > x.txt) >(sort -u > y.txt)
我試圖將輸出重定向到文本文件,但它只是將其列印到標準輸出。
任何提示或想法?
你真的很親近
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
將 ed 輸出擷取
sort
到變數中(來自評論,而不是來自問題)var=$(command | tee >(sort -n > x.txt) >(sort -u > y.txt) | sort -u)