2014-12-24 4 views
0

я столкнулся, как вопрос в указанной ниже вызова определенной функции пользователя с помощью AWKопределяемые пользователем функции в Awk

awk '{ 
    if ("${PROS}" == "") 
         wq_fm_exception ${FILE_SEQ_NBR} 
         #exit 1 
         HEAD="TRUE" 

} 

где wq_fm_exception является определенной функцией пользователя записывается в тот же сценарий, в котором AWK вызывается. Имя параметра $ {FILE_SEQ_NBR}, переданное функции wq_fm_exception, определяется глобально.

Может кто-нибудь предложить?

+2

awk не является оболочкой. Это совершенно другой инструмент с собственным языком. Shell просто вызывает awk для выполнения задач, так же как shell может вызывать программу C для выполнения задач. Вы не можете обращаться к функциям оболочки или переменным внутри awk так же, как вы не можете получить к ним доступ в программах C. Если вы сообщите нам, что вы пытаетесь сделать с образцом ввода и ожидаемым выходом, мы можем вам помочь. –

ответ

2

AWK не может вызывать функции, определенные в нерестующей оболочке. Можно, однако, это написать свою ошибку в файл и выйти с отказом, и иметь нерест оболочку, то с этим справиться:

if ! awk '{ 
    if(...) { 
     print "can't frobnicate the bar" > "/tmp/errors" 
     exit 1 
    } 
}'; then 
    wq_fm_exception "$(cat /tmp/errors)" 
    exit $? 
fi 

(Если вы решите пойти с этим методом, вы, вероятно, хотите использовать mktemp для генерации имени файла для /tmp/errors, а не для его жесткого кодирования.)

+0

У меня есть некоторые утверждения, написанные в моей функции. и мне нужно вызвать эту функцию в зависимости от успеха/отказа оператора if. разве нет способа вызвать эту функцию из awk? –

+1

@rahulgulati: Нет, вы не можете сделать это напрямую. Самое лучшее, что вы можете сделать, это AWK как-то показать оболочке, что вы хотите, чтобы она * запускала функцию - будь то через сигнал, трубу, статус выхода ... но AWK не может запускать вашу функцию оболочки. Это работа раковины. – icktoofay

+0

@rahulgulati: вы не поняли. вы можете объявлять функции в 'awk'. Является ли ваша функция 'awk' функцией или функцией оболочки. Удачи. – shellter

Смежные вопросы