- comm -12 <(seq 2 2 30 | sort) <(seq 3 3 30 | sort) | sort -n
使用上要注意<和( )之間不能夠有空格,指令的輸出其實就是下面三個指令的結果,但不只比較簡潔,而且中間並不需要暫存檔,也就不需要煩惱暫存檔要取什麼名字:
- seq 2 2 30 | sort > two.sort
- seq 3 3 30 | sort > three.sort
- comm -12 two.sort three.sort | sort -n
上面檔案two.sort和three.sort分別代表的是2的倍數和3的倍數,再用comm指令來找出共有的部分。用傳統的方法必須要同時製作兩個暫存檔,而且必須要等這兩個指令都完成後才能夠執行第3個指令。若是使用process substitution的話,就能夠專注在跑程式上面而不需要去處理中間暫存檔的問題。相似的手法也可以做成多重輸出,只是把 < 改成 >
參考資料
- 用 < 讓檔案直接變成標準輸入:標準輸入的使用方式
- 將STDOUT送給多個指令同時處理:和多重輸入不一樣,這邊是多重輸出
- Linux Shell技巧: 进程替代(Process Substitution)
- 英文維基的Process substitution:將結果回傳成一個檔案
用法會是<(command)或是>(command) - 英文維基的Command substitution:將結果回傳成一個字串
用法會是$(command)或是`command` - man bash:找到process substitution那一段的說明
沒有留言:
張貼留言