2011-11-16 29 views
1

我想從AIX的tnsping輸出中提取10.2.0.4.0,所以我寫了tnsping tucson | grep Version | awk '{print $9}',但有時在Linux等其他平臺中的列不盡相同,所以我不能無處不在使用{print $9}。有沒有一種方法,使得如何在AIX,SunOS,Linux和HP-UX中從tnsping輸出中提取版本

  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,HP-UX和Linux:

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

但我得到一個錯誤的的SunOS我想要的東西,可以在Linux,HP-UX,AIX工作, SunOS中。住房的回答

的Linux,AIX和HP-UX後

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 

更新:

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}' 

回答

1

AWK在Solaris上是舊的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。也許你可以得到安裝awksome GAWK或其他溶液(好像你在那裏的方式),只是

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

,你本來也應該削減到您的版本號。另外,使用AWK for'/ Version /'中的過濾器,您不需要在之間的grep和我們已經消除了額外的AWK調用。

我希望這會有所幫助。

+0

@shelter:謝謝你讓我知道'nawk'我'AIX'系統是目前下跌,並NAWK讓我在solaris的版本# – abi1964

1

sed嘗試:

tnsping tucson | 
sed -n '/Version/{              # Grep like 
    [email protected]* Version \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*@\[email protected] # Substitution with @ separator 
    p;                 # Print 
    q;                 # quit 
}' 
相關問題