使用每行管道输出作为脚本参数

时间:2011-12-14 16:23:41

标签: bash grep pipeline

我有一个应用程序(myapp),它为我提供了多行输出

结果:

abc|myparam1|def
ghi|myparam2|jkl
mno|myparam3|pqr
stu|myparam4|vwx

使用grep和sed我可以得到如下参数

myapp | grep '|' | sed -e 's/^[^|]*//' | sed -e 's/|.*//'  

但是希望将这些myparamx值作为脚本的参数来为每个参数执行。

myscript.sh myparam1  
myscript.sh myparam2
etc.

任何帮助非常感谢

3 个答案:

答案 0 :(得分:3)

请参阅xargs。例如:

myapp | grep '|' | sed -e 's/^[^|]*//' | sed -e 's/|.*//' | xargs -n 1 myscript.sh

答案 1 :(得分:2)

可能会有所帮助 -

myapp | awk -F"|" '{ print $2 }' | while read -r line; do /path/to/script/ "$line"; done

答案 2 :(得分:1)

我喜欢Dark Falcon的xargs -n 1解决方案,while read是这类事物的经典工具,但仅仅是为了完整性:

myapp | awk -F'|' '{print "myscript.sh", $2}' | bash

作为旁注,谈到第二个字段的提取,您可以使用cut

myapp | cut -d'|' -f 1 # -f 1 => second field, starting from 0