2014-09-26 4 views
-1

Задание - это запрос, который работал правильно на моем redhat, когда я выполнил то же самое в ubuntu, указав синтаксическую ошибку.AWK не работает в дистрибутиве ubuntu 14

Запрос:

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

Redhat: 192.168.190.82

Ubuntu: ошибка в AWK первой линии,

+0

Опубликовать вывод команды 'ip route get 8.8.8.8'. –

+1

Решение: нам просто нужно установить gawk для этого, чтобы работать. –

ответ

2

Решение: нам просто нужно установить Gawk для этого работать.

 sudo apt-get install gawk 
+1

Да, после установки gawk он станет awk по умолчанию. Ваш 'match' использовал расширение gnu, не доступное на стандартном awk –

0

Вы можете сделать это через AWK (Мок), как показано ниже,

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, но оно не будет работать в других awks. –

+0

удален основной .. –

1

3-й аргумент, чтобы соответствовать() является расширением простак. Просто измените его на:

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

и он будет работать на любом awk.