Visit Our UNIX and Linux User Community


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 04: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 09:36 PM..
tip78

Previous Thread | Next Thread
Test Your Knowledge in Computers #720
Difficulty: Medium
Alan Minsky was an adviser on Stanley Kubrick's movie 2001: A Space Odyssey.
True or False?

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

Featured Tech Videos