Используйте каждую строку конвейерного вывода в качестве параметра для скрипта - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть приложение (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 ]

3 голосов
/ 14 декабря 2011

Пожалуйста, смотрите xargs.Например:

myapp | grep '|' | sed -e 's/^[^|]*//' | sed -e 's/|.*//' | xargs -n 1 myscript.sh
2 голосов
/ 14 декабря 2011

Может быть, это может помочь -

myapp | awk -F"|" '{ print $2 }' | while read -r line; do /path/to/script/ "$line"; done
1 голос
/ 14 декабря 2011

Мне нравится решение xargs -n 1 от Dark Falcon, а while read - классический инструмент для такого рода вещей, но только для полноты:

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

В качестве примечания, говорящего о извлечении2-го поля, вы можете использовать cut:

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