2014-09-26 47 views
-1

下面是在我的redhat上正常運行的查詢,當我在ubuntu中執行相同的語法錯誤時。AWK不能在ubuntu發行版中工作14

查詢:

$ ip route get 8.8.8.8 | awk 'match($0, /src ([0-9.]+)/, a) { print a[1] }' 

紅帽:192.168.190.82

Ubuntu的:在awk的第一線錯誤,

+0

發佈'ip route get 8.8.8.8'命令的輸出。 – 2014-09-26 05:50:33

+1

解決方案:我們只需要安裝gawk即可運行。 – 2014-09-26 05:52:03

回答

2

解決方法:我們只需要安裝GAWK該工作。

 sudo apt-get install gawk 
+1

是的,一旦安裝了gawk,它將成爲默認的awk。您的'match'使用的是gnu擴展,在標準awk上不可用 – 2014-09-26 05:59:26

0

您可以通過AWK(mawk)像下面這樣做,

awk -v RS= '{print gensub(/.*src ([0-9.]+).*/, "\\1", $0);}' 

例子:

$ ip route get 8.8.8.8 | awk -v RS= '{print gensub(/.*src ([0-9.]+).*/, "\\1", $0);}' 
192.168.190.82 
+1

gensub()不是基本的(POSIX),它是另一個GNU awk擴展,它現在也在mawk中顯示,但它在其他awk中不起作用。 – 2014-09-26 12:23:30

+0

刪除了基本.. – 2014-09-26 12:24:26

1

的第三個參數匹配()是徒勞無功的擴展。只需將其更改爲:

awk 'match($0, /src ([0-9.]+)/) { print substr($0,RSTART+4,RLENGTH-4) }' 

它可以在任何awk上運行。