从AWK命令调用方法

时间:2011-09-15 23:41:33

标签: ksh

我有代表订单数量的varibales

我想解析它并调用方法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 个答案:

答案 0 :(得分:2)

您需要在awk脚本中定义HandleOrder函数,以便可以在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作为shell脚本而不是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的shell脚本,其中包含:

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

确保HandleOrder.ksh设置为可执行且位于$PATH