2013-12-08 76 views
2

我只是想開始編寫一個awk腳本來測試包含在數組中,但是我似乎有一個基本的語法錯誤的地方。創建數組時awk語法錯誤

#!/bin/bash 


awk \ 
BEGIN {'myarray["foo"] = "bar" '} \ 
{' \ 
    print "$1" \ 
'} $1 

如果我拿出BEGIN線,那麼確實是腳本的其餘部分工作。

我也嘗試過這樣的:

#!/bin/bash 
awk \ 
{' \ 
    myarray["foo"] = "bar" \ 
    print "$1" \ 
'} $1 

這裏是我得到的錯誤。

awk: syntax error at source line 1 
context is 
    >>> <<< 
awk: bailing out at source line 1 
+1

不清楚你爲什麼要做'{'myarray ....'}'。通常情況下,你應該只用一組單引號來包圍整個awk腳本,比如'awk'BEGIN {...} {.....} END {...}'file> outFile'。你可以使用dbl引號讓所有的shell變量都可見,但@FredrikPihl的建議很好。祝你好運。 – shellter

回答

4

嘗試這樣:

#!/bin/bash 

awk -v param="$1" ' 
BEGIN { myarray["foo"] = "bar"} 
{ 
    print myarray["foo"] 
    print param 
}' $1 

-v是一個變量傳遞到awks域的正確方法:

-v var=val 
     --assign var=val 
       Assign the value val to the variable var, before execution of 
       the program begins. Such variable values are available to the 
       BEGIN block of an AWK program. 

實施例:

$ echo 1 > one_line_file 

$ ./t.sh one_line_file 
bar 
one_line_file