コマンド出力を2つの別々のコマンドにパイプして出力を保存する方法

コマンド出力を2つの別々のコマンドにパイプして出力を保存する方法

私は巨大なファイルで実行される非常に長いコマンドを持っており、それを2回実行する必要があるため、ランタイムは2倍になります。

これが私が今やっていることです:

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

上記でandを使って行ったように、コマンドの出力をsort -uandにリダイレクトsort -nし、各コマンドの出力を別々の変数やファイルに保存する方法があるかどうか疑問に思います。xy

私は成功しなかったので、次のことをするために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)

おすすめ記事