Cut the final line of each sorted value


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Cut the final line of each sorted value
# 8  
Old 01-24-2013
Quote:
Originally Posted by anshaa
My inital input file was somethign like below :
INPUT
Code:
SATURDAY|02-JAN-13|2|ADD|165242.56
SATURDAY|02-JAN-13|2|SUB|1602446.2
SATURDAY|02-JAN-13|2|MULT|109762.97
SATURDAY|04-JAN-13|4|ADD|299754.28
SATURDAY|04-JAN-13|4|SUB|3196764.19
SATURDAY|04-JAN-13|4|MULT|224014.41
SATURDAY|07-JAN-13|7|ADD|68130.48
SATURDAY|07-JAN-13|7|SUB|634547.65
SATURDAY|07-JAN-13|7|MULT|42885.53
SATURDAY|08-JAN-13|8|ADD|236907.27
SATURDAY|08-JAN-13|8|SUB|2495910.06
SATURDAY|08-JAN-13|8|MULT|173774.33
SATURDAY|08-JAN-13|8|ADD|236925.26
SATURDAY|08-JAN-13|8|SUB|2496364.66
SATURDAY|08-JAN-13|8|MULT|173805.1
SATURDAY|07-JAN-13|7|ADD|68362.5
SATURDAY|07-JAN-13|7|SUB|635450.66
SATURDAY|07-JAN-13|7|MULT|42927.81
SATURDAY|07-JAN-13|7|ADD|68362.5
SATURDAY|07-JAN-13|7|SUB|635686.14

after using "sort" of this file i got the below file.
Code:
SATURDAY|02-JAN-13|2|ADD|165242.56
SATURDAY|02-JAN-13|2|SUB|1602446.2
SATURDAY|02-JAN-13|2|MULT|109762.97
SATURDAY|04-JAN-13|4|ADD|299754.28
SATURDAY|04-JAN-13|4|SUB|3196764.19
SATURDAY|04-JAN-13|4|MULT|224014.41
SATURDAY|07-JAN-13|7|ADD|68130.48
SATURDAY|07-JAN-13|7|ADD|68362.5
SATURDAY|07-JAN-13|7|ADD|68362.5
SATURDAY|07-JAN-13|7|SUB|634547.65
SATURDAY|07-JAN-13|7|SUB|635450.66
SATURDAY|07-JAN-13|7|SUB|635686.14
SATURDAY|07-JAN-13|7|MULT|42885.53
SATURDAY|07-JAN-13|7|MULT|42927.81
SATURDAY|08-JAN-13|8|ADD|236907.27
SATURDAY|08-JAN-13|8|ADD|236925.26
SATURDAY|08-JAN-13|8|SUB|2495910.06
SATURDAY|08-JAN-13|8|SUB|2496364.66
SATURDAY|08-JAN-13|8|MULT|173774.33
SATURDAY|08-JAN-13|8|MULT|173805.1

But after this i need something like the below format.
Code:
SATURDAY|02-JAN-13|2|ADD|165242.56
SATURDAY|02-JAN-13|2|SUB|1602446.2
SATURDAY|02-JAN-13|2|MULT|109762.97
SATURDAY|04-JAN-13|4|ADD|299754.28
SATURDAY|04-JAN-13|4|SUB|3196764.19
SATURDAY|04-JAN-13|4|MULT|224014.41
SATURDAY|07-JAN-13|7|ADD|68362.5
SATURDAY|07-JAN-13|7|SUB|635686.14
SATURDAY|07-JAN-13|7|MULT|42927.81
SATURDAY|08-JAN-13|8|ADD|236925.26
SATURDAY|08-JAN-13|8|SUB|2496364.66
SATURDAY|08-JAN-13|8|MULT|173805.1

I need the last row from each sorted value(combination of first 4 columns)
Again, your input data and the sorted input data do not match. If you had sorted the input on the first four columns (assuming | is the field separator), SUB would follow MULT in your sorted when the first three fields match.

The following does what you requested, but (as described above) it doesn't match the output you said you needed:
Code:
sort INPUT | awk '
match($0, /.*[|]/) == 1 {
        k = substr($0, 1, RLENGTH)
        if(lk != k) {
                if(ll) print ll
                lk = k
        }
        ll = $0
}
END {   print ll}'

which produces the output:
Code:
SATURDAY|02-JAN-13|2|ADD|165242.56
SATURDAY|02-JAN-13|2|MULT|109762.97
SATURDAY|02-JAN-13|2|SUB|1602446.2
SATURDAY|04-JAN-13|4|ADD|299754.28
SATURDAY|04-JAN-13|4|MULT|224014.41
SATURDAY|04-JAN-13|4|SUB|3196764.19
SATURDAY|07-JAN-13|7|ADD|68362.5
SATURDAY|07-JAN-13|7|MULT|42927.81
SATURDAY|07-JAN-13|7|SUB|635686.14
SATURDAY|08-JAN-13|8|ADD|236925.26
SATURDAY|08-JAN-13|8|MULT|173805.1
SATURDAY|08-JAN-13|8|SUB|2496364.66

This User Gave Thanks to Don Cragun For This Post:
# 9  
Old 01-25-2013
Sorry My bad.
Thanks the solution works great.
I used nawk, instead of awk.

Last edited by anshaa; 01-25-2013 at 05:00 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread
Login or Register to Ask a Question