Find pattern, and then last field from subsequent lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find pattern, and then last field from subsequent lines
# 1  
Old 11-10-2009
Find pattern, and then last field from subsequent lines

I've got a log file, of the format

Code:
Name: network1
  Dropped packets: 15618
  Dropped packets for IPv6: 27
  Dropped packets: 74
  Dropped packets for IPv6: 0
  Failed RADIUS Authentication procedures: 0
  Failed RADIUS Accounting procedures: 0
Name: network2
  Dropped packets: 1117
  Dropped packets for IPv6: 0
  Dropped packets: 0
  Dropped packets for IPv6: 0
  Failed RADIUS Authentication procedures: 0
  Failed RADIUS Accounting procedures: 0

I want to get the sort it so that it gives

Code:
network1:15618:27:74:0:0:0
network2:1117:0:0:0:0:0

I'm thinking to awk for lines with /Name:/ and then print $NF of it and the following 6 lines, but my awk skills are pretty lame, so I'm sure how to do it.

Thanks...

Last edited by radoulov; 11-11-2009 at 03:31 AM.. Reason: added code tags
# 2  
Old 11-10-2009
Use gawk, nawk or /usr/xpg4/bin/awk on Solaris:

Code:
awk -F': *' 'END { print r }
/^Name/ && r { print r; r = 0 }
{ r = r ? r ":" $2 : $2 }' infile

# 3  
Old 11-10-2009
Code:
nawk -F': *' ' { r = r ? r ":" $2 : $2 } /^Failed RADIUS Accounting procedures/{ print r; r = 0 } ' infile

# 4  
Old 11-10-2009
Quote:
Originally Posted by steadyonabix
Code:
nawk -F': *' ' { r = r ? r ":" $2 : $2 } /^Failed RADIUS Accounting procedures/{ print r; r = 0 } ' infile

Yes,
like mine it assumes a fixed format and with this one you can get rid of the END block.
# 5  
Old 11-10-2009
Radoulov

I always take your awk apart to try to improve mine......

Love that r = r Smilie
# 6  
Old 11-10-2009
Quote:
Originally Posted by steadyonabix
[...]
Love that r = r Smilie
Smilie
# 7  
Old 11-10-2009
if file is big this one will be faster:

Code:
#!/usr/bin/perl -w

open(FH,"somefile");
open(NEW,">newfile");
while(<FH>){
    if(/: (network\d+?)$/){print NEW "\n$1";next}
    /: (\d+)$/;print NEW ":$1"
}

also work with any number of lines without modification while last one contain Failed RADIUS Acc

Last edited by tip78; 11-10-2009 at 08:36 PM..
tip78
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Print field after pattern in all lines

data: hello--hello1--hello2--#growncars#vello--hello3--hello4--jello#growncars#dello--gello--gelloA--gelloB#growncars# I want to be able to print all the values that are found between the patterns "#growncars#" and the next "#growncars#" on the same line. so the output should be: ... (8 Replies)
Discussion started by: SkySmart
8 Replies

2. Shell Programming and Scripting

Find pattern in first field of file

Hello all I have two files. 1. Pattern.txt - It contains patterns to be matched. It has large number of patterns to be matched. Cat Pattern.txt Ram Shyam Mohan Jhon I have another file which has actual data and records are delimted by single or multiple spaces. 2.... (8 Replies)
Discussion started by: krsnadasa
8 Replies

3. Shell Programming and Scripting

sed -- Find pattern -- print remainder -- plus lines up to pattern -- Minus pattern

The intended result should be : PDF converters 'empty line' gpdftext and pdftotext?xml version="1.0"?> xml:space="preserve"><note-content version="0.1" xmlns:/tomboy/link" xmlns:size="http://beatniksoftware.com/tomboy/size">PDF converters gpdftext and pdftotext</note-content>... (9 Replies)
Discussion started by: Klasform
9 Replies

4. Shell Programming and Scripting

Awk: print lines with one of multiple pattern in the same field (column)

Hi all, I am new to using awk and am quickly discovering what a powerful pattern-recognition tool it is. However, I have what seems like a fairly basic task that I just can't figure out how to perform in one line. I want awk to find and print all the lines in which one of multiple patterns (e.g.... (8 Replies)
Discussion started by: elgo4
8 Replies

5. UNIX for Advanced & Expert Users

Need command for grepping pattern lines with subsequent lines

Hi, I have a requirement like, I have a list of pattens in a file say pattern.txt, PHC111 PHC113 and in another file called master.lst i have entries like, PHC111 a b PHC112 a PHC113 b c PHC114 d e (5 Replies)
Discussion started by: rbalaj16
5 Replies

6. Shell Programming and Scripting

Grep the word from pattern line and update in subsequent lines till next pattern line reached

Hi, I have got the below requirement. please suggest. I have a file like, Processing Item is: /data/ing/cfg2/abc.txt /data/ing/cfg3/bgc.txt Processing Item is: /data/cmd/for2/ght.txt /data/kernal/config.klgt.txt I want to process the above file to get the output file like, ... (5 Replies)
Discussion started by: rbalaj16
5 Replies

7. Shell Programming and Scripting

awk - use fields from subsequent lines

I've run into a problem getting exactly what I want out of awk - some folks may recognize this as an output from Amazon's ec2-describe-instances: Given the following: INSTANCE i-4960f321 BLOCKDEVICE Line2Var2 TAG instance i-4960f321 Name web1 TAG instance i-4960f321... (2 Replies)
Discussion started by: colinjohnson
2 Replies

8. Shell Programming and Scripting

awk text record - prepend first field to all subsequent fields

Hello everyone, I've suddenly gotten very interested in sed and awk (and enjoying it quite a bit too) because of a large conversion project that we're working on. I'm currently stuck with a very inefficient process for processing text blocks. I'm sure someone here should be able to easily point out... (2 Replies)
Discussion started by: jameswatson3
2 Replies

9. Shell Programming and Scripting

Displaying lines of a file where the second field matches a pattern

Howdy. I know this is most likely possible using sed or awk or grep, most likely a combination of them together, but how would one go about running a grep like command on a file where you only try to match your pattern to the second field in a line, space delimited? Example: You are... (3 Replies)
Discussion started by: LordJezoX
3 Replies

10. Shell Programming and Scripting

find pattern and replace another field

HI all I have a problem, I need to replace a field in a file, but only in the lines that have some pattern, example: 100099C01101C00000000059394200701CREoperadora_TX 100099C01201C00000000000099786137OPERADORA_TX2 in the example above I need to change the first field from 1 to 2 only if... (3 Replies)
Discussion started by: sergiioo
3 Replies
Login or Register to Ask a Question

Featured Tech Videos