UNIX для цикла с использованием awk для назначения переменной - PullRequest
0 голосов
/ 06 февраля 2019
for i in `cat filename.lst|awk '{print $1}{print $2 > var1}'`
do
echo "$i and $var1"
done

но не работает, у меня есть файл как

xyz 123
abc 456
pqr 789

ожидаемый вывод: -

xyz and 123
abc and 456
pqr and 789

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019
$ awk '{print $1, "and", $2}' file
xyz and 123
abc and 456
pqr and 789

$ sed 's/ / and /' file
xyz and 123
abc and 456
pqr and 789

Если это не все, что вам нужно, отредактируйте ваш вопрос, чтобы уточнить ваши требования и предоставить более по-настоящему представительный пример.

0 голосов
/ 06 февраля 2019

Вы, похоже, ищете что-то вроде

while read -r i value; do
    var1=$value
    echo "$i and $var1"
done <filename.lst

Вы хотите избегать чтения строк с for и бесполезным использованием cat.

Awk не может манипулировать вашими переменными Bash, и Bash не знает, что происходит внутри вашего сценария Awk.

Если вы абсолютно настаиваете на использовании Awk для этого, вы хотите, чтобы его вывод был строкой.вы можете безопасно eval из вашей оболочки.

eval "$(awk '{ print "var1=\047" $2 "\047;\n" \
    "echo \"" $1 " and \$var1\"" }' filename.lst)"

Точное определение "безопасно", вероятно, слишком сложно точно определить.Другими словами, просто не делайте этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...