![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| need help in sort | ali560045 | Shell Programming and Scripting | 2 | 12-04-2007 07:38 AM |
| sort | prasathlogu | UNIX for Dummies Questions & Answers | 1 | 10-08-2007 07:56 AM |
| sort help | unics | Shell Programming and Scripting | 14 | 04-30-2007 08:28 AM |
| du -h | sort ? | fongthai | Shell Programming and Scripting | 6 | 11-02-2006 08:59 PM |
| Sort Help! | kev112 | Shell Programming and Scripting | 3 | 05-30-2005 04:13 PM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
sort and summarize
Hi Guys,
I have a file in UNIX with duplicates, I have use sort command as below to delete duplicates based on the KEY positions/columns but now I do not want to "delete" duplicates but summarize by KEY numeric columns. REALLY NEED HELP... URGENT!!! Thanks in advance. sort -k 1.1,1.92 -u file > outfile |
|
||||
|
Here is the example:
1288M99G14 ALA201001+00000000.000+00000005.000 1288M99G14 ALA201001+00000000.000+00000005.000 1288M99G14 ALB201001+00000005.000+00000000.000 1288M99G14 ALA201002+00000000.000+00000017.000 1288M99G14 ALB201001+00000017.000+00000000.000 1288M99G14 ALA201002+00000000.000+00000005.000 Output: 1288M99G14 ALA201001+00000000.000+00000010.000 1288M99G14 ALB201001+00000023.000+00000000.000 1288M99G14 ALA201002+00000000.000+00000023.000 So summarize by first 2 fields |
|
||||
|
Try this one
filename=$1
sort $filename| awk ' BEGIN {FS="+"; prev_key1=""; prev_key2=0; prev_key2=0; first=1; } { # print "asdfdafsdfsdfasf|"prev_key1 "|"$1 if($1==prev_key1) { prev_key2 += $2; prev_key3 += $3; } else { if(!first) printf("%20.20s+%08.3f+%08.3f\n",prev_key1,prev_key2,prev_key3); else first=0; prev_key1 = $1; prev_key2 = $2; prev_key3 = $3; } } END {printf("%20.20s+%08.3f+%08.3f\n",prev_key1,prev_key2,prev_key3);}' |
|
|||||
|
Quote:
) |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|