Get the SUM of TWO columns SEPARATELY by doing GROUP BY on other columns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Get the SUM of TWO columns SEPARATELY by doing GROUP BY on other columns
# 1  
Old 12-27-2013
Get the SUM of TWO columns SEPARATELY by doing GROUP BY on other columns

My File looks like:

"|" -> Field separator
Code:
A|B|C|100|1000
D|E|F|1|2
G|H|I|0|7
D|E|F|1|2
A|B|C|10|10000
G|H|I|0|7
A|B|C|1|100
D|E|F|1|2

I need to do a SUM on Col. 5 and Col.6 by grouping on Col 1,2 & 3

My expected output is:

Code:
A|B|C|111|11100
D|E|F|3|6
G|H|I|1|16

Can this be done using awk? I have done this kind of SUM for a single column but I'm stuck up when I'm doing SUM for two columns
Smilie
# 2  
Old 12-27-2013
Code:
awk -F '|' '{k = $1"|"$2"|"$3; x[k]+=$4; y[k]+=$5} END{for(k in x){print k"|"x[k]"|"y[k]}}' file

This is just to help you get started. For summing beyond 5 columns, use a loop appropriately.
This User Gave Thanks to balajesuri For This Post:
# 3  
Old 12-27-2013
Quote:
Originally Posted by machomaddy
My File looks like:

"|" -> Field separator
Code:
A|B|C|100|1000
D|E|F|1|2
G|H|I|0|7
D|E|F|1|2
A|B|C|10|10000
G|H|I|0|7
A|B|C|1|100
D|E|F|1|2

I need to do a SUM on Col. 5 and Col.6 by grouping on Col 1,2 & 3

My expected output is:

Code:
A|B|C|111|11100
D|E|F|3|6
G|H|I|1|16

Can this be done using awk? I have done this kind of SUM for a single column but I'm stuck up when I'm doing SUM for two columns
Smilie

If your real file contains many columns then try
Code:
awk -F"|" '{    
                 x=$1 FS $2 FS $3
                 for( i=column_start; i<=column_end; i++)
                 A[x FS i] = A[x FS i] ? A[x FS i] + $i : $i
           }
        END{
                 s = gsub( x, FS)
                 for( i in A ){
                                     x = ""; split(i,S,FS)
                                     for( j=1; j<=s; j++ ) 
                                     x = x ? x FS S[j] : S[j] 
                                     if( !U[x]++ )SS[++k]=x
                              }
             for(i=1;i<=k;i++){
                                     printf SS[i] OFS
                                     for( j=column_start; j<=column_end; j++ )
                                     printf j < column_end ? A[SS[i] FS j] OFS : A[SS[i] FS j] RS  
                              }

           }' column_start="4" column_end="5" OFS="|"  file

Code:
A|B|C|111|11100
D|E|F|3|6
G|H|I|0|14

change column_start="x" and column_end="x" according to your need.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Group by columns and add sum in new columns

Dear Experts, I have input file which is comma separated, has 4 columns like below, BRAND,COUNTRY,MODEL,COUNT NIKE,USA,DUMMY,5 NIKE,USA,ORIGINAL,10 PUMA,FRANCE,DUMMY,20 PUMA,FRANCE,ORIGINAL,15 ADIDAS,ITALY,DUMMY,50 ADIDAS,ITALY,ORIGINAL,50 SPIKE,CHINA,DUMMY,1O And expected output add... (2 Replies)
Discussion started by: ricky1991
2 Replies

2. Shell Programming and Scripting

Sum of Columns

HI Guys, I gave Input file F.Txt ID H1 H2 H3 H4 H5 A 5 6 7 8 9 B 4 65 4 4 7 C 4 4 4 4 4 D 4 4 4 4 4 Output :- ID H1 H2 H3 H4 H5 Total 17 79 19 20 24 Sum of Each Columns (8 Replies)
Discussion started by: pareshkp
8 Replies

3. Shell Programming and Scripting

Evaluate 2 columns, add sum IF two columns satisfy the condition

HI All, I'm embedding SQL query in Script which gives following output: Assignee Group Total ABC Group1 17 PQR Group2 5 PQR Group3 6 XYZ Group1 10 XYZ Group3 5 I have saved the above output in a file. How do i sum up the contents of this output so as to get following output: ... (4 Replies)
Discussion started by: Khushbu
4 Replies

4. Shell Programming and Scripting

Sum of all columns

Hi Friends, I have a file with fields separated with comma. How to print sum of each field of the file? Eg: input file 1,3,6,7 2,1,2,1 0,1,1,0 I want to sum each field separately. Output file 3,5,9,8 Thanks, Suresh (2 Replies)
Discussion started by: suresh3566
2 Replies

5. Shell Programming and Scripting

Evaluate 2 columns, add sum IF two columns match on two rows

Hi all, I know this sounds suspiciously like a homework course; but, it is not. My goal is to take a file, and match my "ID" column to the "Date" column, if those conditions are true, add the total number of minutes worked and place it in this file, while not printing the original rows that I... (6 Replies)
Discussion started by: mtucker6784
6 Replies

6. Shell Programming and Scripting

Sum columns

Hi All, I'm new to this forum. So please be patience with me! :) I have a file that looks like this (all rows have the same number of columns): 19 20 30 15 17 38 51 60 74 85 96 07 .... 10 20 44 59 39 88 13 77 30 10 11 12 .... . . . I want to sum the value of first field to all the... (2 Replies)
Discussion started by: Aderson Nascime
2 Replies

7. Shell Programming and Scripting

how can i group by same columns by another columns in Bash

how can i group by same columns by another columns in Bash Eq. this is a csv file Co1 Co2 Co3 Co4 A A 1,000 1,000 A B 2,000 1,250 A A 2,000 3,002 A C 2,000 3,005 how can i get the result of like this Co1 Co2 Co3 Co4 A A 3,000 ... (5 Replies)
Discussion started by: qjlongs
5 Replies

8. Shell Programming and Scripting

Sum of three columns - in 4N columns file

Hi All, happy new year. I have a file with 4xN columns like 0.0000e+00 0.0000e+00 7.199E+07 7.123E+07 6.976E+07 6.482E+07 5.256E+07 2.523E+07 0.0000e+00 0.0000e+00 8.641E+07 8.550E+07 8.373E+07 7.780E+07 6.309E+07 3.028E+07... (8 Replies)
Discussion started by: f_o_555
8 Replies

9. Shell Programming and Scripting

sum of three columns

Hi All, I have like this M17XX-050-01 0100000000 QQSSS 0.0000e+00 1.712E+06 1.255E+07 0.0000e+00 0.0000e+00 1.722E+06 1.263E+07 0.0000e+00 ... 0.0000e+00 1.204E+06 8.829E+06 0.0000e+00 M17XX-050-01 0100000000 WWSSS 0.0000e+00 7.564E+03 1.165E+01 0.0000e+00... (6 Replies)
Discussion started by: f_o_555
6 Replies

10. Shell Programming and Scripting

awk sum columns

can anyone help me how do i add the colums using awk seperated by character @. for eg i have 3@4 2@9 5@1 the result should be 10 14 i tried using { sum+= $1 } END { print sum } but it just gives the result 10. can anyone help me with this one thank you and best regards (7 Replies)
Discussion started by: phone_book
7 Replies
Login or Register to Ask a Question