Summing up a matrix using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Summing up a matrix using awk
# 1  
Old 02-27-2012
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:
Code:
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     0 ...
100     7     7     7     7     7 ...
...

How could I sum, for a given number of rows each time, the the values for all the columns? Say, summing the column values for 2 rows each time. Ending up with a matrix like:
Code:
300     8     8     8     8     8
900     9     9     9     9     9
1000   7     7     7     7     7

I'm writing some perl code for the task but I'm courious if the task can be done 'easily' using awk. So far I've just got a flavour on how to sum the all the values for all columns{1} or how to sum all values for a row{2},

i.e {2}
Code:
awk '
BEGIN {FS=OFS="\t"}
{
sum=0;
for(i=1;i<=NF;i++)
     {sum+=$i;}
     print sum
}' matrix.txt

Cheers if there's an answer,
J Rodrigo

Last edited by Franklin52; 02-28-2012 at 03:12 AM.. Reason: Code tags
# 2  
Old 02-27-2012
Code:
awk 'NR%2{for (i=1;i<=NF;i++) a[i]+=$i}!(NR%2){for (i=1;i<=NF;i++) {$i+=a[i];a[i]=0};print}' file

# 3  
Old 02-27-2012
Hi JRodrigoF,

One way:
Code:
$ cat infile
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 0 
100 7 7 7 7 7 
$ awk '{ getline line; split( line, fields ); for( i = 1; i <= NF; i++ ) { $i += fields[i] } print }' infile
300 8 8 8 8 8
900 9 9 9 9 9
1000 7 7 7 7 7

Regards,
Birei
# 4  
Old 02-27-2012
Hi bartus11 and birei,

Once again I'm impressed how powerful awk is. Don't understand very well your one-liners but definitely will give myself a proper course and keep practicing,

Cheers guys,
Rodrigo
# 5  
Old 02-27-2012
One-liners are to impress people the power of UNIX.

Let me try to break them down into multi-line with comments so that you can appreciate the real power
Code:
awk '
  # for every odd record number (NR) [NR%2 will equate to 1 (true) for odd NR]
  NR%2 {
    # for every field in each record (NF - number of fields)
    for (i=1; i<=NF; i++) {
      # sum them up and store in an associative array 'a', the index i corresponds to the column number
      a[i]+=$i
    }
  }

  # for every even record number (NR) [!(NR%2) will equate to 1 (true) for even NR. ! means 'not']
  !(NR%2) {
    # for every field in each record (NF - number of fields)
    for (i=1; i<=NF; i++) {
      # add the associative array to the original column position
      $i+=a[i]

      # reset assocaite array to zero
      a[i]=0
    }

    # print the whole row after the changes
    print
  }
' file

These 2 Users Gave Thanks to chihung For This Post:
# 6  
Old 02-28-2012
@Chihung
Thanks for explaining with comment.
This is now readable for amateur for awk like me.
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

Help summing a file using awk

I'm trying to sum a text file using AWK. Here is an example of the file: 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... (7 Replies)
Discussion started by: Drenhead
7 Replies

3. 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

4. Shell Programming and Scripting

how to rearrange a matrix with awk

Hi, every one. I have two files ,one is in matrix like this, one is a list with the same data as the matrix. AB AE AC AD AA AF SA 3 4 5 6 4 6 SC 5 7 2 8 4 3 SD 4 6 5 3 8 3 SE 45 ... (5 Replies)
Discussion started by: xshang
5 Replies

5. 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

6. 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

7. Shell Programming and Scripting

awk? adjacency matrix to adjacency list / correlation matrix to list

Hi everyone I am very new at awk but think that that might be the best strategy for this. I have a matrix very similar to a correlation matrix and in practical terms I need to convert it into a list containing the values from the matrix (one value per line) with the first field of the line (row... (5 Replies)
Discussion started by: stonemonkey
5 Replies

8. 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

9. Shell Programming and Scripting

awk matrix problem

hi there I'm very new in programing and i've started with awk. I'm processing 200 data files and I need to do some precessing on them. The files have 3 columns with N-lines for each line a have on the first and second value is the same for all the files and only the third is variable. like... (2 Replies)
Discussion started by: philstar
2 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