Я новичок в сценариях ksh и высоко ценю любую помощь. мне нужно разобрать файл данных, который выглядит следующим образом:Как запустить скрипт оболочки из команды awk
$ cat data.txt
P1`/tmp/s1.ksh
P2`/tmp/s2.ksh
P3`/tmp/s3.ksh
Здесь P1, P2, P3 являются имена параметров, за которыми следуют имена сценариев, которые вычисляют значения для этих параметров.
Фиктивные скрипты выглядеть следующим образом:
$ cat s1.ksh
!/bin/ksh
echo "v1"
В конце концов, мне нужно, чтобы запустить эти сценарии и сцепить их результаты с именами параметров и производить строку, которая выглядит следующим образом:
P1=v1 P2=v2 P3=v3
Я пытаюсь использовать awk для этого. Как я понял, system() должен запускать скрипты и выводить их вывод в результирующую строку.
$ awk -F\` '{ printf("%s ",$1); system("eval \"$(cat "$2")\"") }' /tmp/data.txt
Но это только печатает имена параметров
P1 P2 P3
Я проверил, если я разобрал data.txt правильно
$ awk -F\` '{ printf(" %s=",$1); printf("eval \"$(cat %s)\"", $2) }' /tmp/data.txt
Выход
P1=eval "$(cat /tmp/s1.ksh)" P2=eval "$(cat /tmp/s2.ksh)" P3=eval "$(cat /tmp/s3.ksh)"
Итак, я ожидайте, что система() должна выполнить последовательность g и конкатенировать его вывод с результирующей строкой.
$ eval "$(cat /tmp/s2.ksh)"
Не могли бы вы мне помочь и объяснить, почему я не получил значения v1, v2, v3 из сценариев. Возможно, есть лучший способ, чем использовать awk для решения моей задачи.
На самом деле я попробовал это, и она работала на моем Ubuntu 14.04. Я получил ожидаемый результат. Кстати, shebang в начале скриптов должен начинаться с #: '#!/Bin/ksh' – midihenry
Это звучит как проблема XY (http://meta.stackexchange.com/questions/66377/what- это-The-ху-проблема). Измените свой вопрос, чтобы показать четкий ввод проб и ожидаемый результат, и мы можем помочь вам сделать это правильно, независимо от того, что это такое. –
Эд Мортон, похоже, вы не читали мой пост. Были входные данные и ожидалось выход. – Anna