Visit Our UNIX and Linux User Community


cat file1 read line-per-line then grep -A 15 lines down in fileb


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting cat file1 read line-per-line then grep -A 15 lines down in fileb
# 1  
Old 01-27-2009
cat file1 read line-per-line then grep -A 15 lines down in fileb

STEP 1
# Set variable
FILE=/tmp/mainfile
SEARCHFILE =/tmp/searchfile

# THIS IS THE MAIN FILE.
cat /tmp/mainfile

Interface Ethernet0/0 "outside", is up, line protocol is up
Hardware is i82546GB rev03, BW 100 Mbps
Full-Duplex(Full-duplex), 100 Mbps(100 Mbps)
MAC address 001e.f75e.8cb4, MTU 1500
IP address 123.123.123.111, subnet mask 255.255.255.240
15297729 packets input, 8174892738 bytes, 0 no buffer
Received 236841 broadcasts, 0 runts, 0 giants
43908 input errors, 43908 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
0 L2 decode drops
15441190 packets output, 2300060743 bytes, 0 underruns
0 output errors, 0 collisions, 28 interface resets
0 late collisions, 0 deferred
0 input reset drops, 0 output reset drops
input queue (curr/max packets): hardware (1/32)
output queue (curr/max packets): hardware (0/25)
Traffic Statistics for "outside":
15297726 packets input, 7894645734 bytes
15441203 packets output, 2018486096 bytes
116781 packets dropped
1 minute input rate 1 pkts/sec, 115 bytes/sec
1 minute output rate 1 pkts/sec, 313 bytes/sec
1 minute drop rate, 0 pkts/sec
5 minute input rate 2 pkts/sec, 204 bytes/sec
5 minute output rate 2 pkts/sec, 420 bytes/sec
5 minute drop rate, 0 pkts/sec
Interface Ethernet0/1 "", is up, line protocol is up
Hardware is i82546GB rev03, BW 100 Mbps
Full-Duplex(Full-duplex), 100 Mbps(100 Mbps)
Available but not configured via nameif
MAC address 001e.f75e.8cb5, MTU not set
IP address unassigned
3133505 packets input, 904670592 bytes, 0 no buffer
Received 2513696 broadcasts, 0 runts, 0 giants
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
6349 L2 decode drops
1826527 packets output, 177409972 bytes, 0 underruns
0 output errors, 0 collisions, 6 interface resets
0 late collisions, 0 deferred
0 input reset drops, 0 output reset drops
input queue (curr/max packets): hardware (4/25)
output queue (curr/max packets): hardware (0/8)
Interface Ethernet0/3 "", is up, line protocol is up
Hardware is i82546GB rev03, BW 100 Mbps
Full-Duplex(Full-duplex), 100 Mbps(100 Mbps)
Available but not configured via nameif
MAC address 001e.f75e.8cb7, MTU not set
IP address unassigned
9211950 packets input, 1513770657 bytes, 0 no buffer
Received 243852 broadcasts, 0 runts, 0 giants
9800 input errors, 9800 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
7 L2 decode drops
8161723 packets output, 3897403307 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 late collisions, 0 deferred
0 input reset drops, 0 output reset drops
input queue (curr/max packets): hardware (8/26)
output queue (curr/max packets): hardware (0/16)
Interface Ethernet0/3.13 "dmzout", is up, line protocol is up
VLAN identifier 13
MAC address 001e.f75e.8cb7, MTU 1500
IP address 123.123.123.115, subnet mask 255.255.255.0
Traffic Statistics for "dmzout":
3795768 packets input, 537313232 bytes
3146266 packets output, 1149119436 bytes
355 packets dropped
1 minute input rate 0 pkts/sec, 106 bytes/sec
1 minute output rate 0 pkts/sec, 77 bytes/sec
1 minute drop rate, 0 pkts/sec
5 minute input rate 0 pkts/sec, 99 bytes/sec
5 minute output rate 0 pkts/sec, 93 bytes/sec
5 minute drop rate, 0 pkts/sec
Interface Ethernet0/3.15 "proddmz", is administratively down, line protocol is down
VLAN identifier 15
MAC address 001e.f75e.8cb7, MTU 1500
IP address 123.123.123.116, subnet mask 255.255.255.0
Traffic Statistics for "proddmz":
0 packets input, 0 bytes
16 packets output, 448 bytes
0 packets dropped
1 minute input rate 0 pkts/sec, 0 bytes/sec
1 minute output rate 0 pkts/sec, 0 bytes/sec
1 minute drop rate, 0 pkts/sec
5 minute input rate 0 pkts/sec, 0 bytes/sec
5 minute output rate 0 pkts/sec, 0 bytes/sec
5 minute drop rate, 0 pkts/sec

STEP 2
# THIS WILL OUTPUT THAT WILL BECOME MY SEARCH STRING FILE.
cat $FILE | grep "Ethernet.* "\"\" | awk '{print $2 " " $3}' > searchfile

OUTPUT of above command
Ethernet0/1 "",
Ethernet0/3 "",

STEP 3
Must be able to read $SEARCHFILE line-per-line then grep 15 lines down within $FILE

STEP 4
# This will then output a CSV list that will be used to create or update a database.
I can short out this step need help with STEP 3 mainly.

PACKBYTESIN=`grep -A 15 "Ethernet.* "\"\" | grep "packets input" | awk '{print $4}'`
INPUTERRORS=`grep -A 15 "Ethernet.* "\"\" | grep "input errors" | awk '{print $1","$4","$6","$8","$10","$12}'`
DECODE=`grep -A 15 "Ethernet.* "\"\" | grep "decode" | awk '{print $1}'`
PACKOUT=`grep -A 15 "Ethernet.* "\"\" | grep "packets output" | awk '{print $1","$4","$6}'`
OUTPUTERROR=`grep -A 15 "Ethernet.* "\"\" | grep "output errors" | awk '{print $1","$4","$6}'`
LATECOLLISIONS=`grep -A 15 "Ethernet.* "\"\" | grep "collisions" | awk '{print $1","$4}'`
RESETDROP=`grep -A 15 "Ethernet.* "\"\" | grep "reset drop" | awk '{print $1","$5}'`

echo -e "$PACKBYTESIN,$INPUTERRORS,$DECODE,$PACKOUT,$OUTPUTERROR,$LATECOLLISIONS,$RESETDROP"

Urgent help needed.
THANKS IN ADVANCE
# 2  
Old 01-27-2009
So you want to find in $FILE each line from $SEARCHFILE, and then get the next 15 lines from $FILE?

Code:
cat $SEARCHFILE | 
while read search; do
   grep -A 15 -F -- "$search" $FILE
done

# 3  
Old 01-27-2009
found the 15 lines this work better.

cat $FILE | grep -A 15 "Ethernet.* "\"\" > outputfile

cat outputfile


Interface Ethernet0/1 "", is up, line protocol is up
Hardware is i82546GB rev03, BW 100 Mbps
Full-Duplex(Full-duplex), 100 Mbps(100 Mbps)
Available but not configured via nameif
MAC address 001e.f75e.8cb5, MTU not set
IP address unassigned
3133505 packets input, 904670592 bytes, 0 no buffer
Received 2513696 broadcasts, 0 runts, 0 giants
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
6349 L2 decode drops
1826527 packets output, 177409972 bytes, 0 underruns
0 output errors, 0 collisions, 6 interface resets
0 late collisions, 0 deferred
0 input reset drops, 0 output reset drops
input queue (curr/max packets): hardware (4/25)
output queue (curr/max packets): hardware (0/8)
--
Interface Ethernet0/3 "", is up, line protocol is up
Hardware is i82546GB rev03, BW 100 Mbps
Full-Duplex(Full-duplex), 100 Mbps(100 Mbps)
Available but not configured via nameif
MAC address 001e.f75e.8cb7, MTU not set
IP address unassigned
9211950 packets input, 1513770657 bytes, 0 no buffer
Received 243852 broadcasts, 0 runts, 0 giants
9800 input errors, 9800 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
7 L2 decode drops
8161723 packets output, 3897403307 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 late collisions, 0 deferred
0 input reset drops, 0 output reset drops
input queue (curr/max packets): hardware (8/26)
output queue (curr/max packets): hardware (0/16)

PACKBYTESIN=`cat outputfile | grep -A 15 "Ethernet.* "\"\" | grep "packets input" | awk '{print $4}'`
INPUTERRORS=`cat outputfile | grep -A 15 "Ethernet.* "\"\" | grep "input errors" | awk '{print $1","$4","$6","$8","$10","$12}'`
DECODE=`cat outputfile | grep -A 15 "Ethernet.* "\"\" | grep "decode" | awk '{print $1}'`

echo -e "$PACKBYTESIN,$INPUTERRORS,$DECODE"

Now all my information gets mixed up.
Instead of getting information from line containing

Ethernet0/1

then

Ethernet0/3


THANKS IN ADVANCE
# 4  
Old 01-27-2009
Useless use of cat, grep and awk.
Maybe you want to start from here:
Code:
awk '/Interface/{if(a)print a;a=$2}/input errors/{a=a FS $0}/decode/{a=a FS $0}END{print a}' fileoutput

# 5  
Old 01-27-2009
I don't see a compelling reason to make the grep string more complicated than
just "Ethernet".... but.... here ya go:



grep Ethernet.*\"\" original_log_file |
cut -d' ' -f2 > a

for line in `cat a`; do

#----------------------------------------------------------------------#
# more finds the first instance of string... #
#----------------------------------------------------------------------#
more +/"$line" original_log_file |
head -15 |
egrep '(packets input|input errors|decode)' > b

#----------------------------------------------------------------------#
# Now all the information for a given Ethernet thing is in file b. #
#----------------------------------------------------------------------#
packets=$( awk '/packets input/ { print $4 }' b )

errors=$( awk '/input errors/ { print $1, $4, $6, $8, $12 }' b )

decode=$( awk '/decode/ { print $1 }' b )

#----------------------------------------------------------------------#
# Print some legible output. #
#----------------------------------------------------------------------#
echo For $line . . .
echo packets: $packets
echo errors: $errors
echo decode: $decode
echo =-------------------------------------

done


Obviously modifiy the echo's however you'd like.
# 6  
Old 01-27-2009
Hey, even better. Just use all ksh:


while read line ; do

if [[ $line = *Ethernet* ]]; then
ethernet="$line"
fi

if [[ $line = *packets*input* ]]; then
packets="$line"
fi

if [[ $line = *input*errors* ]]; then
errors="$line"
fi

if [[ $line = *decode* ]]; then
decode="$line"
fi

if [[ $line = *output*queue* ]]; then

#----------------------------------------------------------------------#
# Print some legible output. #
#----------------------------------------------------------------------#
echo For $ethernet . . .
echo packets: $packets
echo errors: $errors
echo decode: $decode
echo =-------------------------------------
fi

done < original_log_file

Last edited by quirkasaurus; 01-27-2009 at 02:01 PM.. Reason: ok -- all ksh means no "cat" command either. :)
# 7  
Old 01-28-2009
Thanks so much quirkasaurus. Your first reply was very helpfull thanks. The hint to use more is great. YOU THE MAN...

Previous Thread | Next Thread
Test Your Knowledge in Computers #306
Difficulty: Easy
The HTML4 standard was published in 2014.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Get an output of lines in pattern 1st line then 10th line then 11th line then 20th line and so on.

Input file: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 (6 Replies)
Discussion started by: Sagar Singh
6 Replies

2. Shell Programming and Scripting

Read the file line by line and do something with lines

I have a file file_name_O.txt The file can have different number of other files names or nothing I will check cnt=`wc -l file_name_0.txt` if ;then exit 1 fi Now I have to start checking file names, i.e. read txt file line by line. If amount of ,lines equal 1, I can... (4 Replies)
Discussion started by: digioleg54
4 Replies

3. Shell Programming and Scripting

Need a program that read a file line by line and prints out lines 1, 2 & 3 after an empty line...

Hello, I need a program that read a file line by line and prints out lines 1, 2 & 3 after an empty line... An example of entries in the file would be: SRVXPAPI001 ERRO JUN24 07:28:34 1775 REASON= 0000, PROCID= #E506 #1065: TPCIPPR, INDEX= 003F ... (8 Replies)
Discussion started by: Ferocci
8 Replies

4. Shell Programming and Scripting

Match single line in file1 to groups of lines in file2

I have two files. File 1 is a two-column index file, e.g. comp11084_c0_seq6:130-468(-) comp12746_c0_seq3:140-478(+) comp11084_c0_seq3:201-539(-) comp12746_c0_seq2:191-529(+) File 2 is a sequence file with headers named with the same terms that populate file 1. ... (1 Reply)
Discussion started by: pathunkathunk
1 Replies

5. Shell Programming and Scripting

Using regex's from file1, print line and line after matches in file2

Good day, I have a list of regular expressions in file1. For each match in file2, print the containing line and the line after. file1: file2: Output: I can match a regex and print the line and line after awk '{lines = $0} /Macrosiphum_rosae/ {print lines ; print lines } ' ... (1 Reply)
Discussion started by: pathunkathunk
1 Replies

6. UNIX for Dummies Questions & Answers

Find a value inside file1 and replace it with another value from another fileB

i have a file with some data and i need replace a perticular value with some other value from another another file req: file1.txt abc,idle.txt,1234 file2.txt 5678 now the requirement is need to replace the "idle.txt" is with "mike_5678" here 5678 from file2.txt... file2.txt contains only... (2 Replies)
Discussion started by: dssyadav
2 Replies

7. Shell Programming and Scripting

bash: read file line by line (lines have '\0') - not full line has read???

I am using the while-loop to read a file. The file has lines with null-terminated strings (words, actually.) What I have by that reading - just a first word up to '\0'! I need to have whole string up to 'new line' - (LF, 10#10, 16#A) What I am doing wrong? #make file 'grb' with... (6 Replies)
Discussion started by: alex_5161
6 Replies

8. UNIX for Advanced & Expert Users

how do you parse 1 line at a time of file1 ie. line(n) each line into new file

File 1 <html>ta da....unique file name I want to give file=>343...</html> <html>da ta 234 </html> <html>pa da 542 </html> and so on... File 2 343 234 542 and so on, each line in File 1 one also corresponds with each line in File 2 I have tried several grep, sed, while .. read, do,... (4 Replies)
Discussion started by: web_developer
4 Replies

9. Shell Programming and Scripting

Compare multiple fields in file1 to file2 and print line and next line

Hello, I have two files that I need to compare and print out the line from file2 that has the first 6 fields matching the first 6 fields in file1. Complicating this are the following restrictions 1. file1 is only a few thousand lines at most and file2 is greater than 2 million 2. I need to... (7 Replies)
Discussion started by: gillesc_mac
7 Replies

10. UNIX for Dummies Questions & Answers

using 'cat' to in 'while read line'

Hi, I'm having some trouble reading a file that was 'cat' through a while loop. Can anyone suggest alternatives? what i do is cat filename|grep *.stuff while read line do echo $line ... and other commands done The cat,grep line seems to work correctly, but the script hangs when i add in... (3 Replies)
Discussion started by: chugger06
3 Replies

Featured Tech Videos