Альтернатива awk - PullRequest
       17

Альтернатива awk

5 голосов
/ 14 февраля 2011

Я использую следующую команду awk в сценарии ожидания, чтобы получить шлюз для определенного пункта назначения

route | grep $dest | awk '{print $2}'

Однако сценарий ожидания не похож на $ 2 в приведенном выше утверждении.

Кто-нибудь знает альтернативу awk для выполнения той же функции, что и выше?то есть.выходной 2-й столбец.

Ответы [ 6 ]

5 голосов
/ 14 февраля 2011

Вы можете использовать вырезать:

route | grep $dest | cut -d \  -f 2

Использует пробелы в качестве разделителя полей и вытаскивает второе поле

4 голосов
/ 14 февраля 2011

Чтобы ответить на вопрос Expect, одинарные кавычки не имеют особого значения для синтаксического анализатора Tcl. Вы должны использовать фигурные скобки для защиты тела скрипта awk:

route | grep $dest | awk {{print $2}}

И так как awk может делать то же, что и grep, вы можете уйти с одним меньшим процессом:

route | awk -v d=$dest {$0 ~ d {print $2}}
1 голос
/ 14 февраля 2011

SED - лучшая альтернатива для использования. Если вы не против зависимости, Perl также будет достаточно для решения задачи

1 голос
/ 14 февраля 2011

Перед переключением на другую утилиту проверьте, не работает ли разделитель полей.Документация по разделителям полей в GNU Awk здесь .

0 голосов
/ 14 февраля 2011

В качестве альтернативы вы можете использовать Perl:

perl -ne 'if(/foo/) { @_ = split(/:/); print $_[1]; }'

Будет напечатан второй токен каждой строки, содержащей foo, с : в качестве разделителя токенов.

0 голосов
/ 14 февраля 2011

В зависимости от структуры ваших данных вы можете использовать либо обрезку, либо sed для фильтрации и печати второго столбца.

...