Help summing a file using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help summing a file using awk
# 1  
Old 03-26-2013
Help summing a file using awk

I'm trying to sum a text file using AWK. Here is an example of the file:

Code:
600|3H68|        46
600|3H69|        46
600|3H6F|       290
600|3H6G|        24
600|3HDY|         1
600|3HDY|         3
600|3HE0|         1
600|3HE0|         3

I would like to sum the third field if the first two fields are the same.

For example, the last 2 lines, I would like them to sum up and have
600|3HE0| 4

Is this possible using AWK?

I tried something like this, but it gave strange results:
Code:
awk 'BEGIN { FS = "|" } ; '{ arr[$1 "|" $2] += $3 } END {for (i in arr) {print i "|" arr[i] } }' count_all.txt

I appreciate any help you can provide.
# 2  
Old 03-26-2013
Remove the quote after semicolon
Code:
$ awk 'BEGIN { FS = "|" } ; { arr[$1 "|" $2] += $3 } END {for (i in arr) {print i "|" arr[i] } }' file
600|3H68|46
600|3H6F|290
600|3H69|46
600|3H6G|24
600|3HE0|4
600|3HDY|4

This User Gave Thanks to anbu23 For This Post:
# 3  
Old 03-26-2013
Thanks for your reply.

When I try your code, I get the following:

Code:
awk: syntax error near line 1
awk: bailing out near line 1

Here is my exact code that I tried:

Code:
awk 'BEGIN { FS = "|" } ; { arr[$1 "|" $2] += $3 } END {for (i in arr) {print i "|" arr[i] } }' count_sort.txt

Can't seem to find the syntax error.

Thanks again
# 4  
Old 03-26-2013
Use nawk on solaris.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 03-26-2013
Thanks so much to both of you. I think nawk fixed the problem.
# 6  
Old 03-28-2013
Ok, new twist. The input file format has changed and no longer has delimiters in it. Here is an example.

Code:
9652013010129KM         1
9652013010129KM         4
9652013010129KN         4
9652013010129KO         1
9652013010129KO         4
9652013010129KP         1
9652013010129KP         4

I tried to use the FIELDWIDTHS parameter in nawk to specifiy my columns, but it isn't working quite right. Here is what I tried:

Code:
nawk 'BEGIN { FIELDWIDTHS = "3 8 4 10" } ; { arr[$1 $2 $3] += $4 } END {for (i in arr) {print i arr[i] } }' count_sort.txt > count_sum.txt

It doesn't seem to be adding up the 4th column. based on the first 3 being equal. Also, is there a way to keep the leading spaces in the 4th column on the output?

Thanks again for all your help.
# 7  
Old 03-28-2013
Use printf formatting. Here is an example:
Code:
awk '
{
        A[$1] += $2
} END {
        for (i in A)
                printf "%s%11s%8s%10s\n", substr(i, 1, 3), substr(i, 4, 8), substr(i, 12, 4), A[i]
}' file

Change the spacing as per your requirement.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk split columns after matching on rows and summing the last column

input: chr1 1 2 3 chr1 1 2 4 chr1 2 4 5 chr2 3 6 9 chr2 3 6 10 Code: awk '{a+=$4}END{for (i in a) print i,a}' input Output: chr112 7 chr236 19 chr124 5 Desired output: chr1 1 2 7 chr2 3 6 19 chr1 2 4 5 (1 Reply)
Discussion started by: jacobs.smith
1 Replies

2. Shell Programming and Scripting

Summing all fields in a file

I was playing around to see how stuff works, and was trying to sum all fields in a file. cat file 1 2 3 4 5 6 7 8 9 10 11 12 I made this script: awk 'BEGIN {OFS=RS}{$1=$1}{s+=$0} END {print "sum="s}' file This gives 15, why not 78? I test it like this awk 'BEGIN... (5 Replies)
Discussion started by: Jotne
5 Replies

3. UNIX Desktop Questions & Answers

Summing file sizes

I was just curious about how to sum the total file size of a certain type of file. For instance: $find . -name "*.aif" will print out the paths to each .aif file. Instead of printing, how could one sum the total space used by all of the aif files? Thanks! Please use code tags (3 Replies)
Discussion started by: Alexander4444
3 Replies

4. Shell Programming and Scripting

awk summing specific lines and fields

Hi I would like to know if it is possible to sum some specific fields. I have this x;x;x;x;x;x;x;x;467,390,611 Bytes;0.435291 GB;0.062247 GB;0.373045 GB;11,225;157 a;a;a;a;a;a;a;a;13,805,156,846 Bytes;12.857054 GB;1.838559 GB;11.018495 GB;151,063;18,933 b;b;b;b;b;b;b;b;232,797,478,723... (5 Replies)
Discussion started by: nakaedu
5 Replies

5. UNIX for Dummies Questions & Answers

Summing lines in a file

Can anyone tell me how sum values in each record of a file and append that value to the end? For instance a typical record will be: FY12,Budget,771100,,,,,,,,,250,-250 I'd like the record to become FY12,Budget,771100,,,,,,,,,250,-250,0 which can be put into another file. Thank you. (6 Replies)
Discussion started by: LearningLinux2
6 Replies

6. Shell Programming and Scripting

Please Help!!!! Awk for summing columns based on selected column value

a,b,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii a thru ii are digits and strings.... The awk needed....if coloumn 9 == i (coloumn 9 is string ), output the sum of x's(coloumn 22 ) in all records and sum of y's (coloumn 23 ) in all records in a file (records.txt).... (6 Replies)
Discussion started by: BrownBob
6 Replies

7. Shell Programming and Scripting

Using awk to summing from a given line

My file is something like this : 03.097 03.094 03.093 03.095 03.091 04.089 06.093 07.225 08.196 06.097 06.094 05.096 04.086 I'd like to sum it from a given line to another one , e.g.: from line 10 until line 20 What s the awk way solving this ? (1 Reply)
Discussion started by: firelink
1 Replies

8. Shell Programming and Scripting

Summing up a matrix using awk

Hi there, If anyone can help me sorting out this small task would be great. Given a matrix like the following: 100 3 3 3 3 3 ... 200 5 5 5 5 5 ... 400 1 1 1 1 1 ... 500 8 8 8 8 8 ... 900 0 0 0 0... (5 Replies)
Discussion started by: JRodrigoF
5 Replies

9. Shell Programming and Scripting

Awk: Summing values with group criteria

Hi Guys, I have a text file with ";" like separator F1;F2;F3;F4;F5 444;100041;IT;GLOB;1800000000 444;100041;TM;GLOB;1000000000 444;10300264;IT;GLOB;2000000000 444;10300264;IT;GLOB;2500000000 I have to sum the cullums F5 for same F2 and F3 collums The result must be: ... (7 Replies)
Discussion started by: gianluca2
7 Replies

10. Shell Programming and Scripting

awk scripting - matching records and summing up time

Hello. I just found out about awk, and it appears that this could handle the problem I'm having right now. I first stumbled on the thread How to extract first and last line of different record from a file, and that problem is almost similar to mine. In my case, an ASCII file will contain the... (0 Replies)
Discussion started by: Gonik
0 Replies
Login or Register to Ask a Question