2015-02-24 5 views
-1

Я хочу знать, как передать переменные оболочки awk..может кто-то, пожалуйста, помогите.Как передать переменные оболочки awk в скрипт оболочки ksh?

м = 10 // здесь оболочка vairable

awk -F, -v outfile="$outfile" ' 
    { 
    printf("%14s Code %s %7s %\047.2f\n"," ", $1," ",$2) >> outfile 
    r[NR] = $1 
    c[NR] = $3 
    } 
    END {printf("%14s Total Amount %7s %d \n "," "," ",$m) >> outfile 

    }' trancumt.txt 

скажите, пожалуйста, у нас есть способ сделать это или нет ..

+0

Что '-v выходной_файл = "$ выходной_файл"' имею в виду? – hek2mgl

+0

Параметр -v задает переменную awk (в этом случае используется внешний файл). –

+0

Я ожидал ответа от OP, однако почему бы вам не пропустить «-v m =» $ m "' ??? – hek2mgl

ответ

0

Вы можете передать несколько переменных из оболочки в AWK, используя опцию -v несколько раз. Правильная команда будет:

awk -F, -v outfile="$outfile" -v m="$m" '<awk commands>' 

Проверьте следующий пример, чтобы увидеть, что он работает:

m="10" 
outfile="foo.bar" 
awk -v m="$m" -v outfile="$outfile" 'BEGIN{print m, outfile; exit}' 

Выход:

10 foo.bar 
+0

how для печати этого хека .. его высказывание m: команда не найдена ... m = 10 awk -F, -v outfile = "$ outfile" -vm = "$ m" 'и напечатан следующим образом .. printf ("% 14s Total Amount% 7s% d \ n "," "," ", $ m) – jcrshankar

+0

Я добавил пример, чтобы продемонстрировать, что он работает – hek2mgl

+0

спасибо большое .. у меня было место раньше, это остановило меня .. теперь его работа – jcrshankar

0

Изменить строку немного, чтобы замена:

END {printf("%14s Total Amount %7s %d \n "," "," ",$m) >> outfile 

в

END {printf("%14s Total Amount %7s %d \n "," "," ",'$m') >> outfile 

В качестве альтернативы (см комментарии), измените строку

END {printf("%14s Total Amount %7s %d \n "," "," ",m) >> outfile 

при добавлении опции

-v m=$m 
Смежные вопросы