我有来自某个命令的文本(例如echo -e "10 ABC \n5 DEF \n87 GHI"
)。这个文本通过管道,我得到了想要的输出(例如它是GHI
)。通缉输出被发送到以下管道步骤(例如,它是| xargs -I {} grep -w {} FILES |
)
我的问题是:
我想在发送到下一步之前将变量附加到“inter pipe”输出 - 我该怎么做?
示例:
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
答案 0 :(得分:2)
您不能在管道中间设置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
答案 1 :(得分: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
答案 2 :(得分:1)
将其插入流中。所以我认为您只想添加?内容?变量到流中的每一行'?这个预先 $ example
的内容即
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。