2009-02-06 53 views

回答

3

對於第一個,你不使用$爲內部AWK變量,試試這個來代替:

fury> echo | awk -v e='he' '{print e}' 
he 

對於第二個,你的病情NF意味着NF = 0,因此將只打印非!空行:

fury> echo | awk 'NF {print "hello"}' 
fury> echo "7 8" | awk 'NF {print "hello"}' 
hello 

我從來沒有見過你的第三個語法,ARGV是單維數組,所以你可以使用:

fury> awk 'BEGIN {print ARGV[5]}' 1 2 3 4 5 6 7 
5 
fury> awk 'BEGIN {print ARGV[5] "\n" ARGV[3]}' 1 2 3 4 5 6 7 
5 
3 

注意我爲第三個塊使用了BEGIN塊,否則它會嘗試打開並處理1,2,3 ...文件。

+0

與不同的數組呢?我可以通過彼此不同除以陣列的元素,如: 1 DIVIDE 2 2 DIVIDE 4 => 0,5 0,5 可能? – 2009-02-07 00:45:57

2

嘗試:

echo "hello" | awk ' {print $0} ' 
echo "hello" | awk ' {print $1} ' 

注意$ 0返回全程記錄和$ 1只有第一項; awk將其計數器設置爲1.所以

echo "hello1 hello2 hello3" | awk ' {print $0} ' 

返回hello1 hello2 hello3。雖然

echo "hello1 hello2 hello3" | awk ' {print $3} ' 

將返回hello3

我喜歡這個awk tutorial.

3

首先,基本的shell腳本理智:

  • 務必附上你的腳本在單引號

注那個腳本是單個參數 - 或「-f file」的文件名。

awk腳本是一系列'<pattern> <action>'對。爲了清晰起見,這一行動被包含在大括號'{}'中,並且再次表示理智。

由於大同表示,第一個例子應該是:

awk -v -e e='he' '{ print e }' 

第二個例子是不可思議的 - 你可能是指:

awk '{ print "hello" }' 

變量NF是上線的字段數。你可能會得到awk來解釋

awk 'NF { print "hello" }' 

彷彿有輸入線路上的任何數據(字段的NF!= 0,或數量不爲零),然後打印「你好」。

最後一個例子同樣是不可思議的; ARGV是'awk'參數的數組,命令行沒有提供。但它是一個一維數組。你的子腳本符號想把它當作一個Python字典或者Perl散列,把兩個索引組合起來。你確定 - awk支持關聯數組;但由於您沒有在ARGV [5,2]中向數組添加任何內容,因此它不會打印任何內容。