首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从AIX、SunOS、Linux和HP-UX中的tnsping输出中提取版本

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

Stack Overflow用户
提问于 2011-11-16 05:48:28
回答 2查看 1.8K关注 0票数 1

我想从AIX中的tnsping输出中获取10.2.0.4.0,因此我编写了tnsping tucson | grep Version | awk '{print $9}',但有时在其他平台(如Linux )中,列会有所不同,因此不能在任何地方使用{print $9}。有没有办法

  1. 命令查找Version
  2. 然后就在它打印出任何数字之后(包括".")

或者其他方法?

代码语言:javascript
复制
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中获得了它:

代码语言:javascript
复制
tnsping tucson | grep Version | awk -F Version  '{print $2}' | awk '{print $1}'

但是,我在 SunOS 上遇到了一个错误--我想要一些能在Linux、HP-UX、AIX和SunOS上工作的东西。

代码语言:javascript
复制
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和Linux:

代码语言:javascript
复制
tnsping tucson | grep Version | awk -F Version  '{print $2}' | awk '{print $1}'

SunOS:

代码语言:javascript
复制
tnsping tucson | grep Version | nawk -F Version  '{print $2}' | nawk '{print $1}'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-18 21:12:09

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

我不认为旧的AWK支持多字符值作为字段分隔符,因为您定义了-F Version (不错的技巧!)。如果你幸运的话,在这个值周围加上引号也许能解决问题。

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

有点像

代码语言:javascript
复制
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或者另一个解决方案(看起来你已经在那里了),只是

代码语言:javascript
复制
tnsping tucson | ${awk} '/Version/ {sub(/,*Version /, "", $0) ; sub(/.*$/, "", $0); print $0; exit}'

无论如何,你应该缩减到你的版本号。另外,在AWK中为'/Version/‘设置过滤器时,在中间不需要grep,我们已经消除了对AWK的额外调用。

我希望这能帮到你。

票数 1
EN

Stack Overflow用户

发布于 2011-11-18 21:40:43

请尝试使用sed

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8147281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档