获取管道中的行数

获取管道中的行数

我有一个 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

答案1

摆弄文件描述符可能会让你更进一步:

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 -ls 被重定向到 fd 3,而 fd 又指向要分配给 VAR 的原始 stdout 。

相关内容