2016-04-25 39 views
0

剛剛發現,在「AWK」使用開關的情況下我的問題是在這方面的知識基礎完全一樣使用--enable-開關在bash腳本:如何有AWK聲明

switch/case doesn't work in awk

現在我在bash腳本中使用我的awk語句,而不是將它作爲單獨的AWK腳本文件運行。考慮到我如何在我的bash腳本中使用--enable-switch。這是我的腳本的結構:

#! bin/ksh 
. ~/.profile 
// bash if-else statements to perform some tasks 
/usr/bin/awk ' 
BEGIN { 
     // array[] defined 
} 

// some statements 
function printmsg(msg) { 
     switch(1) { 
     case /pattern1/: 
       print msg 
       break 
     case /pattern2/: 
       print msg 
       break 
     } 
}' file 

我在哪裏可以執行--enable-switch

我GAWK的版本是gawk-3.1.5-16.el5

+0

我認爲你是對的。因此,我現在唯一的選擇是將它們改爲幾個if-else語句:) –

+1

根據我對3.1.7的gawk手冊頁的解釋,「--enable-switch」選項是編譯時選項,並且不是運行時命令行選項,除非它首先使用「--enable-switch」選項編譯。我安裝了版本4.1.3,'switch'是一個有效的_control語句_並且不需要使用它。所以,如果'--enable-switch'選項不起作用,我相信你或者需要使用一個更高版本,其中'switch'被編譯到可執行文件中,或者你需要獲取你的版本的源代碼'使用'--enable-switch'選項來編譯它。 – user3439894

回答

1

您使用的是非常舊版本的gawk,switch語句是默認啓用爲4.0,我們現在是在4.1.something。您錯過了很多非常有用的功能(比switch語句更有用,請參見http://www.gnu.org/software/gawk/manual/gawk.html#Feature-History),以便獲得新的gawk。

話雖如此,你可以繼續使用switch()安裝新的gawk後,但恕我直言,這是不值得讓你的腳本gawk特定的,只是重寫它,如果elses,如果這是唯一的特定於gawk的功能正在使用。

+1

是的,他們改變了一套if-else。運行在我們很多系統上的RHEL版本是5.x,並且它們全都具有小於4.x的gawk,所以沒有必要保持腳本特定於gawk –