- 论坛徽章:
- 0
|
有如下文件a,
-- context --
PUBLIC BILL.ANBOB.COM BIABC bill_a1 20150319
PUBLIC ACCT.ANBOB.COM ACABC acct_a1 20150319
PUBLIC ACCT.ANBOB.COM ACABC acct_b2 20150319
PUBLIC ACCT.ANBOB.COM ACABC acct_b1 20150319
PUBLIC TBCS.ANBOB.COM TBABC TBCS_B2 20150323
PUBLIC TBCS.ANBOB.COM DBABC TBCS_B1 20150319
H60010925 FWKT.ANBOB.COM FWABC acct_a1 20150323
现在想用循环取第4列,调用oracle 的tnsping 取到IP ,替换原来的值为IP,如果不能转换IP跳过
$ tnsping acct_b1
TNS Ping Utility for HPUX: Version 11.2.0.3.0 - Production on 05-MAY-2015 13:30:49
Copyright (c) 1997, 2011, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 133.16.0.13)(PORT = 1521)) (CONNECT_DATA = (SID = acctb1)))
OK (0 msec)
现在截取tnsping 的ip 有如下
# linux
# IPS=tnsping $TNS|grep "DESCRIPT"|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|tr "\\n" ","
# unix
IPS=`$TNSPING $line|grep "DESCRIPT"|sed -e 's/.*HOST *= *//' -e 's/ *).*//'|tr "\\n" ","`
现在因为是ksh 无法使用sed -i 回写到原文件中,因此输出到新文件,因tnsping 有可能返回两个IP 所以使用的tr- oracle@> vi dl_plus.sh
- FILE_DBLINK=/home/oracle/dl`hostname`_`date +%Y%m%d`.txt
- FILE_DBLINK1=2.txt
- TNSPING=/oracle/app/oracle/product/11.2.0.3/dbhome_1/bin/tnsping
- while read line
- do
- echo 1
- TNS=`awk '$4 !~ /:/ && NF=5 {print $4}' $line`
- # linux
- # IPS=tnsping $TNS|grep "DESCRIPT"|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|tr "\\n" ","
- # unix
- IPS=`$TNSPING $TNS|grep "DESCRIPT"|sed -e 's/.*HOST *= *//' -e 's/ *).*//'|tr "\\n" ","`
- echo "$line \t $IPS" >>$FILE_DBLINK1
- done < $FILE_DBLINK
复制代码 oracle@> sh dl_plus.sh
1
好像没有循环, 请问shell 如何修改?
oracle@> cat 2.txt
133.16.0.73,
|
|