Bash
在管道中獲取行數
我有一個看起來像這樣的 bash 腳本:
some_process | sort -u | other_process >> some_file
我想在流式傳輸數據時獲取行數,在數據排序之後但在由 other_process 處理之前,我嘗試了這樣的事情:
some_process | sort -u | tee >(wc -l > $some_var_i_can_print_later) | other_process >> some_file
這對我不起作用,有沒有辦法在管道中流式傳輸數據時將計數儲存在變數中?
另外,我想避免使用我需要擔心清理的 tmpfiles
擺弄文件描述符可能會讓你更進一步:
VAR=$( exec 3>&1 some_process | sort -u | tee >(wc -l >&3) | other_process >> some_file )
或者:
VAR=$({ some_process | sort -u | tee >(wc -l >&3) | other_process >> some_file } 3>&1)
other_process
’ 的輸出附加到some_file
,但wc -l
’ 被重定向到 fd3
,後者又指向要分配給 VAR 的原始標準輸出。