Bash
拆分不同命令的輸入並組合結果
我知道如何組合不同命令的結果
paste -t',' <(commanda) <(commandb)
我知道管道相同的輸入到不同的命令
cat myfile | tee >(commanda) >(commandb)
現在如何組合這些命令?這樣我就可以做到
cat myfile | tee >(commanda) >(commandb) | paste -t',' resulta resultb
說我有一個文件
我的文件:
1 2 3 4
我想做一個新文件
1 4 2 2 3 4 3 2 6 4 1 8
我用了
cat myfile | tee >(tac) >(awk '{print $1*2}') | paste
會給我垂直的結果,我真的想按水平順序粘貼它們。
當您進行多個流程替換時,不能保證以任何特定順序獲得輸出,因此您最好堅持使用
paste -t',' <(commanda < file) <(commandb < file)
假設
cat myfile
代表一些昂貴的管道,我認為您必須將輸出儲存在文件或變數中:output=$( some expensive pipeline ) paste -t',' <(commanda <<< "$output") <(commandb <<< "$output")
使用您的範例:
output=$( seq 4 ) paste -d' ' <(cat <<<"$output") <(tac <<<"$output") <(awk '$1*=2' <<<"$output")
1 4 2 2 3 4 3 2 6 4 1 8
另一個想法:FIFO 和單個管道
mkfifo resulta resultb seq 4 | tee >(tac > resulta) >(awk '$1*=2' > resultb) | paste -d ' ' - resulta resultb rm resulta resultb
1 4 2 2 3 4 3 2 6 4 1 8