Bash

如何將命令的輸出通過管道傳輸到兩個單獨的命令並儲存輸出

  • October 27, 2020

我有一個非常長的命令執行在一個巨大的文件上,我被迫執行它兩次,這使執行時間加倍。

這就是我目前正在做的事情:

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

我想知道是否有任何方法可以將命令的輸出重定向到sort -uandsort -n並將每個的輸出儲存到單獨的變數或文件中,就像我上面使用xand所做的那樣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)

引用自:https://unix.stackexchange.com/questions/616697