下面是在我的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的第一線錯誤,
下面是在我的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的第一線錯誤,
解決方法:我們只需要安裝GAWK該工作。
sudo apt-get install gawk
是的,一旦安裝了gawk,它將成爲默認的awk。您的'match'使用的是gnu擴展,在標準awk上不可用 – 2014-09-26 05:59:26
您可以通過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
gensub()不是基本的(POSIX),它是另一個GNU awk擴展,它現在也在mawk中顯示,但它在其他awk中不起作用。 – 2014-09-26 12:23:30
刪除了基本.. – 2014-09-26 12:24:26
的第三個參數匹配()是徒勞無功的擴展。只需將其更改爲:
awk 'match($0, /src ([0-9.]+)/) { print substr($0,RSTART+4,RLENGTH-4) }'
它可以在任何awk上運行。
發佈'ip route get 8.8.8.8'命令的輸出。 – 2014-09-26 05:50:33
解決方案:我們只需要安裝gawk即可運行。 – 2014-09-26 05:52:03