首页 > 解决方案 > 如何将最后一个管道的输出发送到两个不同的命令?

问题描述

所以,我有一个带有一堆数字的文本文件,每行一个数字是具体的,所以我这样做: - cat filename.txt|sort -n|head -1得到最高的数字,我可以cat filename.txt|sort -n|tail -1得到最低的数字。只是为了确定是否有一种方法可以将cat filename.txt|sort -n|其输出发送到一行中的两个不同命令并具有输出(最高数字和最低数字彼此相邻)

标签: bashshellpipe

解决方案


您可以使用和处理替换来做有趣的事情tee,但输出的顺序可能不稳定(由于处理的时间安排)

sort -n filename.txt | tee >(tail -1 >/dev/tty) | head -1

在这种情况下,我会使用 sed 打印第一行和最后一行:

sort -n filename.txt | sed -n '1p; $p'

正如@chepner 建议的那样

... | sed -n '1p; $p' | paste - -     # tab separated

或者

... | awk 'NR == 1 {first = $0} END {print first, $0}'   # space separated

推荐阅读