awk + значение экспорта в awk - PullRequest
3 голосов
/ 05 июля 2010

следующая программа должна напечатать слова

First 

Second 

Third

Но так как параметр i из awk не получает значение из цикла «for», выведите все слова:

     First second third
     First second third
     First second third

Какисправить awk, чтобы сначала напечатать «первое» слово, затем «второе» слово и т. д.

THX

Яэль

 program:

 for i in 1 2 3
 do
 echo "first second third" | awk '{print $i}'
 done

Ответы [ 4 ]

2 голосов
/ 05 июля 2010

Вы можете сделать:

for a in First Second Third
do
    awk 'BEGIN { print ARGV[1] }' $a
done

Или вы можете сделать:

for a in First Second Third
do
    awk -v arg=$a 'BEGIN { print arg }'
done
2 голосов
/ 05 июля 2010

не делайте ненужного. оболочка для петли не нужна! Просто сделай это с помощью awk!

$ echo "first second third" | awk '{for(i=1;i<=NF;i++)print $i}'

2 голосов
/ 05 июля 2010

Вы можете изменить свой код следующим образом:

for i in 1 2 3
do
 echo "first second third" | awk -v i=$i '{print $i}'
done

Чтобы использовать переменную 'i' из оболочки.

Вы также можете просто изменить разделитель записей (RS), чтобы получить тот же результат:

echo "first second third" | awk 'BEGIN{RS=" "} {print $1}'

Но я не уверен, что это то, что вы ищете.

0 голосов
/ 17 августа 2015

Или вы можете использовать:

echo "first second third" | awk -F " " -v OFS="\n"  '{print $1,$2,$3}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...