每一次文本处理的背后都是无聊的灵魂
标准不统一的问题给人造成的困扰很大
比如网络给你的是他交换机的信息,你要看的却是你物理服务器的信息。
交换机信息的信息如下
aaa_leaf_1_H777
port device
10GB/0/1 host1
10GB/0/2 host2
10GB/0/3 host3
10GB/0/4 ERROR
10GB/0/5 host5
10GB/0/6 host6
10GB/0/7 host7
10GB/0/8 ERROR
10GB/0/9 ERROR
10GB/0/10 host10
10GB/0/11 host11
10GB/0/12 ERROR
10GB/0/13 host13
10GB/0/14 host14
abb_leaf_1_H777
port device
10GB/0/1 host18
10GB/0/2 host19
10GB/0/3 host20
10GB/0/4 host21
10GB/0/5 host22
10GB/0/6 host23
10GB/0/7 host24
10GB/0/8 host25
10GB/0/9 host26
10GB/0/10 host27
10GB/0/11 host28
10GB/0/12 host29
10GB/0/13 host30
10GB/0/14 host31
ccc_leaf_1_H777
port device
10GB/0/1 host18
10GB/0/2 host19
10GB/0/3 host20
10GB/0/4 host21
10GB/0/5 ERROR
10GB/0/6 ERROR
10GB/0/7 ERROR
10GB/0/8 host25
10GB/0/9 host26
10GB/0/10 host27
10GB/0/11 host28
10GB/0/12 ERROR
10GB/0/13 host30
10GB/0/14 host31
但是我主机端的表是这样
host1 aaa_leaf_1#1 ccc_leaf_1#1
host2 aaa_leaf_1#2 ccc_leaf_1#2
host3 aaa_leaf_1#3 ccc_leaf_1#3
host4 aaa_leaf_1#4 ccc_leaf_1#4
host5 aaa_leaf_1#5 ccc_leaf_1#5
host6 aaa_leaf_1#6 ccc_leaf_1#6
host7 aaa_leaf_1#7 ccc_leaf_1#7
host8 aaa_leaf_1#8 ccc_leaf_1#8
host9 aaa_leaf_1#9 ccc_leaf_1#9
host10 aaa_leaf_1#10 ccc_leaf_1#10
host11 aaa_leaf_1#11 ccc_leaf_1#11
host12 aaa_leaf_1#12 ccc_leaf_1#12
host13 aaa_leaf_1#13 ccc_leaf_1#13
host14 aaa_leaf_1#14 ccc_leaf_1#14
host15 aaa_leaf_1#15 ccc_leaf_1#15
host16 aaa_leaf_1#16 ccc_leaf_1#16
host17 aaa_leaf_1#17 ccc_leaf_1#17
host18 aaa_leaf_1#18 ccc_leaf_1#18
这让我怎么让快熟找出我哪些主机设置的LLDP有问题呢,只能先处理交换机端出现的信息
以下是研究出来的函数,当然后期还要加工以下,但已经能把每个段落中端口信息加上段落的首行,也就是交换机信息
switch_ch () {
OLDFILE=$1
cat $OLDFILE|sed '/^\t/d'|grep -v ^port>newfile
TARGERFILE=newfile
SWITCHLINELIST=(`cat -n $TARGERFILE|grep 'leaf'|awk '{print $1}'`)
SWITCHNAMELIT=(`cat -n $TARGERFILE|grep 'leaf'|awk '{print $2}'`)
i=0
FILEENDLINE=`cat $TARGERFILE|wc -l`
ENDINDEX=`expr ${#SWITCHLINELIST[@]} - 1`
while [ $i -le $ENDINDEX ]
do
STARLINE=`expr ${SWITCHLINELIST[$i]} + 1`
LEAFNAME=`echo ${SWITCHNAMELIT[$i]}|awk -F'_' '{print $1"_"$2"_"$3}'`
if [ $i -eq $ENDINDEX ];then
sed -i "${STARLINE},${FILEENDLINE}s/^/${LEAFNAME}/g" $TARGERFILE
else
NEXTLEAFLINEINDEX=`expr $i + 1`
NEXTLEAFLINE=`expr ${SWITCHLINELIST[$NEXTLEAFLINEINDEX]} - 1`
sed -i "${STARLINE},${NEXTLEAFLINE}s/^/${LEAFNAME}/g" $TARGERFILE
fi
i=`expr $i + 1`
done
}
switch_ch
网友评论