2011-09-15 50 views
0

我代表爲了NUMER從AWK命令調用方法

我想分析它,並調用方法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" 
} 

預期結果varibales:

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

實際結果

Syntax Error 
+0

@SimonC是正確的。我會問'爲什麼你認爲你需要圍繞整個命令的反引號?' 1.反引號已棄用,除非您確定您的代碼將與Sun等Bourne shell一起使用,否則請使用'$(cmd)'。 2.'$(...)'和反引號都是一個叫做命令替換的shell。你的例子不需要它。像'var = $(... cmd ..)'是適當的命令替換使用。還有其他用途。 3.如果你要定期進行shell編程,不要習慣使用CSV數據;-)!祝你好運! – shellter

回答

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中。

+0

嗨, 它;工作正常,但有沒有辦法將HandleOrder從AWK中取出,因爲我的HandleOrder方法超過了500行。 謝謝 – David

+0

我已經更新了我的答案,以包含第二個例子,顯示如何使HandleOrder.ksh成爲一個單獨的shell腳本。 –

+0

非常感謝您的幫助 – David