2016-02-12 107 views
1

我從shell腳本調用myAwk.awk像下面,AWK:無法訪問傳遞的參數

awk -f myAwk.awk -v inputKeyword="SEARCH" file2.xml

$bash: cat myAwk.awk 
BEGIN{ 
print "This is from awk script:" inputKeyword; //This prints SEARCH string. Fine. 
} 

/<record/{ i=1 } 
i { a[i++]=$0 } 
/<\/record>/ { 
    if (found) { 
     for (i=1; i<=length(a); ++i) print a[i] >> resultFile.xml 
    } 
    i=0; 
    found=0 
} 
/<keyword>inputKeyword<\/keyword>/ { found=1 } //Looks like the value for inputKeyword is not available here. 
//There are no errors though. 

我怎樣才能使inputKeyword值可用在我需要的地方?

+1

你不能在'/.../'中使用它,使用'〜'來匹配。 –

回答

1

您需要更改線路,

/<keyword>inputKeyword<\/keyword>/ { found=1 } 

$0 ~ "<keyword>"inputKeyword"</keyword>" { found=1 } 

如果匹配模式(regex)在變量中,則不需要//awk將不會插入//之間的內容。這將被視爲只是一個字符串在那裏。

+0

'$ 0'有什麼價值?爲什麼我需要'$ 0'? – user2488578

+0

@ user2488578,'$ 0'將會有當前行。這是一個awk的內置變量。 – sat

1

按照手冊頁,你應該-f前通過的選項:

SYNOPSIS

`gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...` 
    `gawk [ POSIX or GNU style options ] [ -- ] program-text file ...`