Как извлечь версию из вывода tnsping в AIX, SunOS, Linux и HP-UX - PullRequest
1 голос
/ 16 ноября 2011

Я хочу получить 10.2.0.4.0 из вывода tnsping в AIX, поэтому я написал tnsping tucson | grep Version | awk '{print $9}', но иногда на других платформах, таких как Linux, столбец меняется, поэтому я не могу использовать {print $9} везде.Есть ли способ, при котором

  1. Команда ищет Version
  2. , а затем сразу после того, как печатает любое число (включая «.»)

Или любые другие методы?

TNS Ping Utility for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production on 16-NOV-2011 16:19:02

Copyright (c) 1997,  2007, Oracle.  All rights reserved.

Used parameter files:

Used HOSTNAME adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=bluebird.informatica.com))(ADDRESS=(PROTOCOL=TCP)(HOST=10.65.40.235)(PORT=1521)))
TNS-12535: TNS:operation timed out

Я получил его для AIX, HPUX и Linux:

tnsping tucson | grep Version | awk -F Version  '{print $2}' | awk '{print $1}'

Но я получаю сообщение об ошибке SunOS Я хочу что-то, что будет работать в Linux, HP-UX, AIX и SunOS.

zenvo%  tnsping tucson | grep Version | awk -F Version  '{print $2}' | awk '{print $1}'
awk: syntax error near line 1
awk: bailing out near line 1

Обновление после ответа Шелтера

Linux, AIX и HP-UX:

tnsping tucson | grep Version | awk -F Version  '{print $2}' | awk '{print $1}'

SunOS:

tnsping tucson | grep Version | nawk -F Version  '{print $2}' | nawk '{print $1}'

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Пожалуйста, попробуйте с sed :

tnsping tucson |
sed -n '/Version/{                                                       # Grep like
    s@.* Version \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*@\1@i  # Substitution with @ separator
    p;                                                                   # Print
    q;                                                                   # quit
}'
1 голос
/ 19 ноября 2011

AWK на Solaris - это старый AWK.Обычно пользователи Solaris используют nawk для получения преимуществ «нового» AWK.

Я не думаю, что старый AWK поддерживает многосимвольное значение в качестве разделителя полей, как вы определили -F Version (хороший трюк!),Если вам повезет, добавьте кавычки вокруг этого значения, чтобы решить эту проблему.

Скорее всего, вы должны сделать свой скрипт умным, чтобы назначать nawk при работе в Solaris.

Что-то вроде

case $( uname -a ) in
    *Solaris* ) awk=nawk ;;
    * ) awk=awk
esac

tnsping tucson | grep Version | ${awk} -F "Version"  '{print $2}' | ${awk} '{print $1}'

должен добиться цели.У меня больше нет доступа к системе Solaris, поэтому я не могу убедиться, что это сработает, но я бы удивился, если бы это не сработало.

Хм, теперь кое-что из моего прошлого говорит мнечто даже nawk в Solaris не любил строки как FieldSeps.Возможно, вам удастся установить awksome gawk ИЛИ другое решение (кажется, вы уже в пути), просто

tnsping tucson | ${awk} '/Version/ {sub(/,*Version /, "", $0) ; sub(/.*$/, "", $0); print $0; exit}'

, и вам все равно придется сократить номер своей версии.Кроме того, с фильтром в AWK для '/ Version /' вам не нужен промежуточный интервал, и мы исключили дополнительный вызов AWK.

Надеюсь, это поможет.

...