Вызов метода из команды AWK - PullRequest
       2

Вызов метода из команды AWK

0 голосов
/ 16 сентября 2011

У меня есть вариабельные значения, которые представляют порядковый номер

Я хочу разобрать его и вызвать метод handleOrder

Я пробовал, но не работает

 #!/bin/ksh
ORDER_LIST=100,200,300
`echo $line |awk -F"," '{for(i=0;i<=NF;i++) HandleOrder printf $i}'`

HandleOrder 
(
 echo "My Order is $1"
}

Ожидаемый результат:

My Order is 100
My Order is 200
My Order is 300

Фактический результат

Syntax Error

1 Ответ

2 голосов
/ 16 сентября 2011

Вам необходимо определить функцию HandleOrder внутри скрипта awk, чтобы ее можно было вызывать в скрипте awk.Кроме того, вы хотите начать цикл с 1, чтобы не печатать $0, переменную, которая содержит всю строку.Что-то вроде:

#!/bin/ksh
ORDER_LIST=100,200,300
echo $ORDER_LIST | awk -F"," '
  function HandleOrder(order) { print "My Order is ", order } 
  {for(i=1;i<=NF;i++) { HandleOrder($i) }}
'

Если вы хотите иметь HandleOrder в качестве сценария оболочки вместо функции awk, то используйте что-то вроде:

#!/bin/ksh
ORDER_LIST=100,200,300
echo $ORDER_LIST | awk -F"," '
  {for(i=1;i<=NF;i++) { system("HandleOrder.ksh " $i) }}
'

и создайте сценарий оболочки с именемHandleOrder.ksh содержащий:

#!/bin/ksh
echo "My Order is $1"

Убедитесь, что HandleOrder.ksh установлен как исполняемый и находится в $PATH.

...