You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用tee实现命令输出分流至两命令并合并结果?

解决管道分流后合并输出的问题

你的核心需求是避免重复读取源文件,用tee分流到两个处理命令,再用paste合并结果对吧?之前的tee用法不对,因为paste需要明确接收两个处理后的数据流,而不是原文件内容。

先给你直接能用的命令:

paste <(cat myfile.txt | tee >(cut -f2 | xargs wc -l | awk '{print $1}' >&3) | cut -f1) <&3

为啥这个能行?

  1. tee把myfile.txt的内容同时送到两个分支:
    • 一个分支直接走cut -f1,输出第一列的键值
    • 另一个分支处理第二列:cut -f2提取文件路径,xargs wc -l统计文件行数,awk '{print $1}'只保留数字(去掉wc输出里的文件名),结果写入文件描述符3
  2. paste的第一个输入是键值分支的结果,第二个输入是文件描述符3的行数结果,刚好对应合并成你要的格式

如果觉得文件描述符有点绕,也可以用临时文件过渡(适合更复杂的场景):

# 用tee分流到两个临时文件
cat myfile.txt | tee >(cut -f1 > temp_keys) >(cut -f2 | xargs wc -l | awk '{print $1}' > temp_counts) > /dev/null
# 合并结果
paste temp_keys temp_counts
# 清理临时文件
rm temp_keys temp_counts

原来的命令问题在哪?

你之前的命令里,tee会把原文件内容同时输出到两个进程替换和stdout,然后paste只接收到了stdout的原内容,根本没拿到两个处理后的结果,所以输出不符合预期。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:40:36