|
|
1
2
它不是由tee定义的,但是正如daenyth所说,在tee完成传递数据之前,wc不会完成——所以通常tee也会在那时将数据传递给awk。在这种情况下,最好让awk做计数。
缺点是它在完成之前不知道数字(知道它需要缓冲数据)。在您的示例中,tee和wc都将stdout连接到同一个管道(对于awk,stdin),但顺序未定义。cat(和大多数其他管道工具)可用于按已知顺序组装文件。 可以使用更先进的管道技术,如bash corocesses(coproc)或命名管道(mkfifo或mknod p)。后者在文件系统中为您命名,可以将其传递给其他进程,但是您必须清理它们并避免冲突。tempfile或$$可能对此很有用。管道不用于缓冲数据,因为它们的大小通常有限,只会阻塞写操作。 管道是错误解决方案的示例:
这里的问题是,tee会在写东西给cat的时候遇到困难,cat想先完成wcout。从tee到cat的管道数据太多了。 编辑有关dmckee的答案: 是的,订单可以重复,但不能保证。它涉及到规模、调度和缓冲区大小。在这个GNU/Linux设备上,示例在几千行之后开始分解:
|
|
|
2
1
我怀疑在这种情况下,
为什么不让awk在打印行之前计算行数呢? |
|
|
3
0
也就是说,在我的MacBoox上我得到:
非常一致。我必须仔细阅读bash手册页才能确定。 类似地:
每次……
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
|
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 1 年前 |
|
|
Marco · PyCharm Linux系统文件上os.stat异常 1 年前 |