A05350695(630cs-c6509-3dcc3-1)
Switch Port 6/23
WS-C6509 Software, Version McSW: 7.3(2) NmpSW: 7.3(2)
Copyright (c) 1995-2002 by Cisco Systems
630cs-c6509-3dcc3-1
630 cobbins Street, Level3, Data Centre, Cabinet3
Basically I want the info that is at the end of the text file, and it needs to be printed as above.
Here is how I would approach it. I only saved the first 2 items, but the rest is more of the same. I left some debug output in for now to show what is going on.
Code:
$ cat reader
#! /usr/bin/ksh
exec < text
read garbage
read garbage
item1=""
item2=""
IFS=""
while read line ; do
line=${line##+( )}
address=${line%%: *}
line=${line##* }
echo address = $address " " line ="\"$line"\"
case $address in
32)
item1="$line"
;;
48)
line=${line%%.*}
item1="${item1}${line}"
;;
80)
line=${line#???}
line=${line%%.*}
item2="$line"
;;
esac
done
echo item1 = $item1
echo item2 = $item2
exit 0
$ ./reader
address = 0 line ="........_....J.."
address = 16 line =".... ...?....$TB"
address = 32 line ="A05350695(630cs-"
address = 48 line ="c6509-3dcc3-1).."
address = 64 line ="................"
address = 80 line ="...6/23.......*."
address = 96 line ="..dWS-C6509 Soft"
address = 112 line ="ware, Version Mc"
address = 128 line ="pSW: 7.3(2) NmpS"
address = 144 line ="W: 7.3(2).Copyri"
address = 160 line ="ght (c) 1995-200"
address = 176 line ="2 by Cisco Syste"
address = 192 line ="ms.....WS-C6509."
address = 208 line ="...main.....q..."
address = 224 line ="................"
address = 240 line ="630cs-c6509-3dcc"
address = 256 line ="3-1......+......"
address = 272 line =",..............."
address = 288 line =".....6.630 cobbi"
address = 304 line ="ns Street, Level"
address = 320 line ="3, Data Centre,"
address = 336 line ="Cabinet3"
address = line =""
item1 = A05350695(630cs-c6509-3dcc3-1)
item2 = 6/23
$
Thanks.. I just tried it using nawk and it works well..
Anyway just to let you guys know what I was doing.
I'm using a script to find out which CISCO switchport the server is connected to. You run the script and pass your interface to it.
ie:
whichport eri0
This is the script so far..
I will break it out into functions and add a usage function aswell.
Code:
#!/bin/ksh
INT=$1
echo "Collecting packets on the network..."
snoop -d $INT -o /tmp/of.1 &
#
# every 60 seconds Cisco sends out a packet that contains good information
#
echo "0 sec.."
sleep 15
echo "15 sec.."
sleep 15
echo "30 sec.."
sleep 15
echo "45 sec.."
sleep 15
echo "60 sec.."
sleep 3
echo "63 sec.."
#
# we will wait for 60+ seconds to make sure we get the special packet
#
pkill snoop
#
# the ether packet type 2000 needs to be found
#
echo "Creating ASCII file..."
snoop -vv -i /tmp/of.1 > /tmp/of.2
#
# get the line number the ether packet type 2000 is at
#
line=`grep -n "ETHER: Ethertype = 2000 (Unknown)" /tmp/of.2 | awk '{FS=":"} { print $1 }' | head -1`
if [ -z $line ]; then
echo "Could not find a CDP packet, exiting."
rm /tmp/of.1 /tmp/of.2
exit 1
fi
echo "Found the Ethertype = 0x2000 on line = $line..."
#
# from the line go back 6 and pick out the first line and then the 3rd field = packet number
#
packetnumber=`cat /tmp/of.2 | head -${line} | tail -6 | head -1 | awk '{ print $3 }'`
echo "Found the Ethertype = 0x2000 in packet = $packetnumber..."
#
# get the content of the packet which has the switch port the server is plugged into
#
snoop -i /tmp/of.1 -p${packetnumber} -x 0 >> /tmp/of.3
#
cat /tmp/of.3 | sed -e 's/ *//' >> /tmp/of.4
exec < of.4
read garbage
read garbage
SN=""
PORT=""
SW=""
LCT=""
IFS=""
while read line ; do
line=${line##+( )}
address=${line%%: *}
line=${line##* }
# echo address = $address "" line ="\"$line"\"
case $address in
32)
SN="$line"
;;
48)
line=${line%%.*}
SN="${SN}${line}"
;;
80)
line=${line#???}
line=${line%%.*}
PORT="$line"
;;
96)
line=${line#??}
SW="$line"
;;
112)
line="$line"
SW="${SW}${line}"
;;
128)
line="$line"
SW="${SW}${line}"
;;
144)
line="$line"
SW="${SW}${line}"
;;
160)
line="$line"
SW="${SW}${line}"
;;
176)
line="$line"
SW="${SW}${line}"
;;
192)
line=${line%%.*}
SW="${SW}${line}"
;;
288)
line=${line#???????}
LCT="$line"
;;
304)
line="$line"
LCT="${LCT}${line}"
;;
320)
line="$line"
LCT="${LCT}${line}"
;;
336)
line="$line"
LCT="${LCT}${line}"
;;
esac
done
echo""
echo""
echo " `uname -n` is connected to CISCO Switch $SN , Port $PORT"
echo " The switch is located at $LCT"
echo " and has the following software loaded:"
echo " $SW"
echo""
echo""
rm /tmp/of.1 /tmp/of.2 /tmp/of.3 /tmp/of.4
exit 0
note the tab removal in sed.
Code:
# cat -vet whichport | grep sed
cat /tmp/of.3 | sed -e 's/^I*//' >> /tmp/of.4$
#
To shorten it a bit more I think I might use the nawk command to strip out the info I want.
Here is the script that i think I will continue to work on..
just need to split it out into functions, add a few more tests, a usage function and a disply function, to format the display in a better readable format.
Anyway the bulk of the code is here for you to use if you like...
As before you need to pass in the interface you wish to use.
Code:
#!/bin/ksh
#
echo "Collecting packets on the network..."
snoop -d $1 -o /tmp/of.1 &
#
# every 60 seconds Cisco sends out a packet that contains good information
#
echo "0 sec.."
sleep 15
echo "15 sec.."
sleep 15
echo "30 sec.."
sleep 15
echo "45 sec.."
sleep 15
echo "60 sec.."
sleep 3
echo "63 sec.."
#
# we will wait for 60+ seconds to make sure we get the special packet
#
pkill snoop
#
# the ether packet type 2000 needs to be found
#
echo "Creating ASCII file..."
snoop -vv -i /tmp/of.1 > /tmp/of.2
#
# get the line number the ether packet type 2000 is at
#
line=`grep -n "ETHER: Ethertype = 2000 (Unknown)" /tmp/of.2 | awk '{FS=":"} { print $1 }' | head -1`
if [ -z $line ]; then
echo "Could not find a CDP packet, exiting."
rm /tmp/of.1 /tmp/of.2
exit 1
fi
echo "Found the Ethertype = 0x2000 on line = $line..."
#
# from the line go back 6 and pick out the first line and then the 3rd field = packet number
#
packetnumber=`cat /tmp/of.2 | head -${line} | tail -6 | head -1 | awk '{ print $3 }'`
echo "Found the Ethertype = 0x2000 in packet = $packetnumber..."
#
# get the content of the packet which has the switch port the server is plugged into
#
snoop -i /tmp/of.1 -p${packetnumber} -x 0 >> /tmp/of.3
nawk 'BEGIN{
for(i=0; i<=256; i++)
a[sprintf("%02x",i)] = ((i<32||i>126) ? "\n" : sprintf("%c",i))
}
$1~/:$/{
for(i=2; i<=9; i++)
if($i ~ /^....$/)
printf a[substr($i,1,2)] a[substr($i,3,2)]
}' /tmp/of.3 | nawk NF
rm /tmp/of.1 /tmp/of.2 /tmp/of.3
exit 0
There's two version there for anyone to play around with and use if you like..
Hello Team,
I have the following details in a txt file (please note the spaces and tabs)
C1 C2 C3
------------------ --------------- -------------
abc, xyz 2 8
pqr 2 ... (9 Replies)
I have written some scripts that resulted in the table below (Column1 is ITEM, Column2 is Group, Column3 is Category and Column4 is Quantity) but I want the output in another format:
Input:
K123 X CATA 3
K123 Y CATA 4
K123 Z CATA 2
K123 X CATB 5
K123 Y CATB 2
K123 Z CATB 2
B65 M CATB... (7 Replies)
Hi ,
i am generating some data by firing sql query with connecting to the database by my solaris box.
The below one should be the header line of my excel ,here its coming in separate row.
TO_CHAR(C. CURR_EMP_NO
---------- ---------------
LST_NM... (6 Replies)
Hello Learned People,
Good evening. I have absolutely no idea as how to do this & I admit that I do not know anything in unix. I must learn this one of these days.
Im a help desk incharge today & someone gave me this file to be formatted & I have a file like this.
vi NewFile.txt
232... (8 Replies)
Hi,
I have two files , one file with data file with attributes that need to be sent to another file to generate a predefined format.
Example:
File.txt
AP|{SSHA}VEEg42CNCghUnGhCVg==
APVG3|{SSHA}XK|"password"
AP3|{SSHA}XK|"This is test"
....
etc
---------
test.sh has... (1 Reply)
i am running df -k command on aix machine.
i got the output like this. i need to store into file and send that file into microsoft excel.i need to allign properly.
Filesystem 512 blocks Free % Used Iused %Iused Mounted on
/dev/hd4 262144 126488 52% ... (9 Replies)
Hi all,
I have input text file of this format
objectclass:endeavor
pid:12345
postalAddress:379 PROSPECT ST
street:STE B
l:TORRINGTON
st:CT
postalCode:067905238
telephoneNumber:9999999999... (2 Replies)
Dear all,
I have written a program which access database and displays the values returned by the query . There are 10 columns to be displayed in one row. But am ending with 5 lines displayed on 1st line and the next 5 in the 2nd line.
Ex :
21608 10-20-2007 148 Al's Appliance... (7 Replies)
Hi all, I'd like to capture the output from the 'top' command to monitor my CPU and Mem utilisation.Currently my command isecho date
`top -b -n1 | grep -e Cpu -e Mem` I get the output in 3 separate lines.Tue Feb 24 15:00:03
Cpu(s): 3.4% us, 8.5% sy .. ..
Mem: 1011480k total, 226928k used, ....... (4 Replies)
below is the output is ls -l
-rw-r--r-- 1 tonyt staff 3212 Apr 17 1999 file1
-rw-r--r-- 1 tonyt staff 4541 Mar 3 21:08 file2
why the date format is not the same? (6 Replies)