2

我有来自某个命令的文本(例如它是echo -e "10 ABC \n5 DEF \n87 GHI")。此文本通过管道,我得到想要的输出(例如它GHI)。想要的输出被发送到以下管道步骤(例如它的| xargs -I {} grep -w {} FILES |)。
我的问题是:
我想在将变量发送到下一个步骤之前将变量附加到“管道间”输出 - 我该怎么做?


例子:

echo -e "10 ABC \n5 DEF \n87 GHI" | 
   sort -nr -k1 |
   head -n1 |
   cut -f 2 |  # Wanted output comes here. I want to append it to a variable before it goes to `grep`
   xargs -I {} grep -w {} FILES |
   # FOLLOWING ANALYSIS
4

3 回答 3

4

您不能在管道中间设置 shell 变量,但您可以使用tee命令将输出发送到文件,然后稍后读取该文件。

echo -e "10 ABC \n5 DEF \n87 GHI" | 
   sort -nr -k1 |
   head -n1 |
   cut -f 2 |
   tee intermediate.txt |
   xargs -I {} grep -w {} FILES |
   # FOLLOWING ANALYSIS

# intermediate.txt now contains 87 GHI
于 2013-10-17T15:10:53.890 回答
1

这样的事情怎么样

echo -e "10 ABC \n5 DEF \n87 GHI" | sort -nr -k1 | head -n1 | cut -f 2 | while read MYVAR; do echo "intermediate value: $MYVAR"; echo $MYVAR | xargs -I {} grep -w {} FILES; done
于 2013-10-17T15:19:10.403 回答
1

将其插入流。所以我认为你只是想添加?内容?流中每个“行”的变量?这预先添加了 $example 的内容

IE

   example="A String"
   echo -e "10 ABC \n5 DEF \n87 GHI" | 
   sort -nr -k1 |
   head -n1 |
   cut -f 2 |  
   sed s/^/$example/ |
   xargs -I {} grep -w {} FILES |
   # FOLLOWING ANALYSIS

sed s/$/$example/ 追加

NB倾向于在 bash 中以这种方式做很多事情,但是一长串的削减、seds 和 head 等确实表明也许是时候打破 awk 或 perl 了。

于 2013-10-17T15:47:40.913 回答