我正在命令行上解析文本。如何获取一个命令的输出并在下一个命令的两个地方使用它?
some_command | head -n $( awk '/search_term/ {print FNR} output_of_some_command ) output_of_some_command
some_command
我正在截断使用的输出,但我需要搜索(在本例中为使用)head
的输出以找到要截断的行号。some_command
awk
我可以这样做吗,还是我需要写入临时文件?
答案1
对于这个特定的任务,您可以使用 –sed
而不是–head
或者您可以使用:awk
head
some_command | awk '{print} /search_term/{exit}'
打印行,但是,当找到与搜索词匹配的行时,退出(并且之后不再处理任何行)。
您描述的问题的更通用的解决方案是
some_command | tee >(command2) | command3
或者
some_command | tee >(command2) >(command3)
这些可以在 中工作bash
,但可能在很多其他 shell 中都行不通(包括sh
)。 为你提供一个文件句柄,指向正在运行的进程的管道>(command)
command
. 您可能知道,tee
可以让您获取数据流并将其写入多个地方。
但你的问题比你所说的要复杂得多。你不是想做
你想做的
其中head
命令(对应于C
图中的)从“ some_command
”(A
)获取输入,但还具有从awk
(B
。我怀疑对此的一般解决方案是很多更加棘手。