如何从AIX,SunOS,Linux和HP-UX中的tnsping输出中提取版本

时间:2011-11-16 05:48:28

标签: linux aix hp-ux sunos

我想从AIX中的tnsping输出中获取10.2.0.4.0,所以我写了tnsping tucson | grep Version | awk '{print $9}',但有时候在Linux等其他平台上,列也各不相同,所以我无法在任何地方使用{print $9}。有没有这样的方式

  1. 该命令会查找Version
  2. 然后在打印出任何数字之后(包括“。”)
  3. 或其他任何方法?

    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
    

    Shelter的回答后更新

    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 个答案:

答案 0 :(得分:1)

Solaris上的AWK是旧的AWK。通常,Solaris人员使用nawk来获得“新”AWK的好处。

我不认为旧的AWK支持多字符值作为字段分隔符,因为您定义了-F Version(很好的技巧!)。如果幸运的话,在该值附近添加引号可能会解决问题。

更有可能的是,在Solaris上运行时,必须使脚本智能分配nawk。

这样的东西
case $( uname -a ) in
    *Solaris* ) awk=nawk ;;
    * ) awk=awk
esac

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

应该做的伎俩。我再也无法访问Solaris系统了,所以我无法验证这是否可行,但如果没有,我会感到惊讶。

嗯,现在我过去的一些东西告诉我,即使是Solaris上的nawk也不像FieldSeps那样喜欢字符串。也许你可以安装令人难以置信的gawk或其他解决方案(看起来你正在那里),只是

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

无论如何,你应该减少你的版本号。此外,使用AWK中的'/ Version /'过滤器,您不需要在两者之间使用grep,我们已经消除了对AWK的额外调用。

我希望这会有所帮助。

答案 1 :(得分:1)

请尝试 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
}'