Bash

在管道中獲取行數

  • January 24, 2022

我有一個看起來像這樣的 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’ 被重定向到 fd 3,後者又指向要分配給 VAR 的原始標準輸出。

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