Cer*_*era 4 shell streaming pipe tee
有时我想在管道中插入一些东西以用于报告或其他一些次要用途。它可能像 一样简单wc -l
,或更复杂,awk
比如甚至是 python 脚本。运行这样的管道会很好:
zcat my_data_file.gz \
| wc -l > /tmp/linecount
| process_data.py
Run Code Online (Sandbox Code Playgroud)
问题是大多数实用程序不会将数据正确输出到标准输出。tee
可以将数据写入临时文件,但是我必须等到一切完成:
zcat my_data_file.gz \
| tee /tmp/f \
| process_data.py && \
wc -l /tmp/f > /tmp/linecount && rm /tmp/f
Run Code Online (Sandbox Code Playgroud)
这不是最佳的:它可能是一个运行时间非常长的管道;我可能希望更快地看到类似物的中间结果wc
;我可能不想将所有数据存储在临时文件中。
您可以使用tee
并处理替换>(...)
:
zcat my_data_file.gz |
# Count number of lines in stream
tee >(wc -l > /tmp/linecount) |
# Further processing
process_data.py
Run Code Online (Sandbox Code Playgroud)
请注意,管道可用于行延续,并且注释可以散布在命令之间,这是构建复杂管道时的一个很好的功能。