Sum specified values (columns) per row


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sum specified values (columns) per row
# 8  
Old 04-19-2014
Code:
$ cat test.txt
comp51820_c1_seq1    405    N    0:29:0:0:0:0    0:51:0:0:0:0    0:57:0:0:0:0    0:6:0:0:0:0    0:37:0:0:0:0
comp51820_c1_seq1    406    N    0:0:0:29:0:0    0:0:0:51:0:0    0:0:0:57:0:0    0:0:0:6:0:0    0:0:0:37:0:0
comp51820_c1_seq1    407    N    0:0:0:31:0:0    0:0:0:48:0:0    0:0:0:59:0:0    0:0:0:8:0:0    0:0:0:45:0:0
comp51820_c1_seq1    408    N    0:31:0:0:0:0    0:51:0:0:0:0    0:60:0:0:0:0    0:9:0:0:0:0    0:48:0:0:0:0
comp51820_c1_seq1    409    N    0:1:0:0:0:0    0:51:0:0:0:0    0:60:0:0:0:0    0:9:0:0:0:0    0:48:0:0:0:0

$ awk '{for(i=4;i<=NF;i++){n=split($i,arr,":");for(j=1;j<=n;j++)tot+=arr[j];if(tot==8){print;next}tot=0;}}' test.txt
comp51820_c1_seq1    407    N    0:0:0:31:0:0    0:0:0:48:0:0    0:0:0:59:0:0    0:0:0:8:0:0    0:0:0:45:0:0


Last edited by itkamaraj; 04-19-2014 at 12:43 AM.. Reason: output format correction
# 9  
Old 04-19-2014
This works to exclude the correct lines, but it also excludes a line that should be accepted (since the five sums (one from each column) are all >= 8). Desired output is:
Code:
comp51820_c1_seq1	407	N	0:0:0:31:0:0	0:0:0:48:0:0	0:0:0:59:0:0	0:0:0:8:0:0	0:0:0:45:0:0
comp51820_c1_seq1	408	N	0:31:0:0:0:0	0:51:0:0:0:0	0:60:0:0:0:0	0:9:0:0:0:0	0:48:0:0:0:0

I'm trying to understand why the first line above is excluded from the output...
# 10  
Old 04-19-2014
sorry.. i didnt understand your question...

so, you mean.. if any of the column sum is less than 8, then it should not print the line ?

---------- Post updated at 12:30 PM ---------- Previous update was at 12:17 PM ----------

so.. something like this ?

Code:
$ awk '{for(i=4;i<=NF;i++){n=split($i,arr,":");tot=0;for(j=1;j<=n;j++)tot+=arr[j];if(tot>=8){flag+=1;}}if(flag==5)print;flag=0}' test.txt
comp51820_c1_seq1    407    N    0:0:0:31:0:0    0:0:0:48:0:0    0:0:0:59:0:0    0:0:0:8:0:0    0:0:0:45:0:0
comp51820_c1_seq1    408    N    0:31:0:0:0:0    0:51:0:0:0:0    0:60:0:0:0:0    0:9:0:0:0:0    0:48:0:0:0:0

This User Gave Thanks to itkamaraj For This Post:
# 11  
Old 04-19-2014
Yes that's right. That's a better way of saying it.
So if input is:
Code:
comp51820_c1_seq1    405    N    0:29:0:0:0:0    0:51:0:0:0:0    0:57:0:0:0:0    0:6:0:0:0:0    0:37:0:0:0:0
comp51820_c1_seq1    406    N    0:0:0:29:0:0    0:0:0:51:0:0    0:0:0:57:0:0    0:0:0:6:0:0    0:0:0:37:0:0
comp51820_c1_seq1    407    N    0:0:0:31:0:0    0:0:0:48:0:0    0:0:0:59:0:0    0:0:0:8:0:0    0:0:0:45:0:0
comp51820_c1_seq1    408    N    0:31:0:0:0:0    0:51:0:0:0:0    0:60:0:0:0:0    0:9:0:0:0:0    0:48:0:0:0:0
comp51820_c1_seq1    409    N    0:1:0:0:0:0    0:51:0:0:0:0    0:60:0:0:0:0    0:9:0:0:0:0    0:48:0:0:0:0

Then output is:
Code:
comp51820_c1_seq1    407    N    0:0:0:31:0:0    0:0:0:48:0:0    0:0:0:59:0:0    0:0:0:8:0:0    0:0:0:45:0:0
comp51820_c1_seq1    408    N    0:31:0:0:0:0    0:51:0:0:0:0    0:60:0:0:0:0    0:9:0:0:0:0    0:48:0:0:0:0

# 12  
Old 04-19-2014
read my above post
# 13  
Old 04-19-2014
That does the job, thank you!

(I was reading quickly and skipped over your solution thinking it was just a quote from the previous message.)
# 14  
Old 04-19-2014
Didn't you say you need to exempt the fifth value in any column? Try (based on itkamaraj's proposal):
Code:
awk     '       {for (i=4; i<=NF; i++){
                          n = split ($i, TMP, ":")
                          tot = -TMP[5] 
                          for (j=1; j<=n; j++) tot += TMP[j]
                          if (tot<8) break
                        }
                        if (i>NF) print
                }
        ' file

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Copy columns from one file into another and get sum of column values and row count

I have a file abc.csv, from which I need column 24(PurchaseOrder_TotalCost) to get the sum_of_amounts with date and row count into another file say output.csv abc.csv- UTF-8,,,,,,,,,,,,,,,,,,,,,,,,, ... (6 Replies)
Discussion started by: Tahir_M
6 Replies

2. Shell Programming and Scripting

Do replace operation and awk to sum multiple columns if another column has duplicate values

Hi Experts, Please bear with me, i need help I am learning AWk and stuck up in one issue. First point : I want to sum up column value for column 7, 9, 11,13 and column15 if rows in column 5 are duplicates.No action to be taken for rows where value in column 5 is unique. Second point : For... (12 Replies)
Discussion started by: as7951
12 Replies

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

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

5. Shell Programming and Scripting

Add sum of columns and max as new row

Hi, I am a new bie i need some help with respect to shell onliner; I have data in following format Name FromDate UntilDate Active Changed Touched Test 28-03-2013 28-03-2013 1 0.6667 100 Test2 28-03-2013 03-04-2013 ... (1 Reply)
Discussion started by: gangaraju6
1 Replies

6. UNIX for Dummies Questions & Answers

Unique values in a row sum the next column in UNIX

Hi would like to ask you guys any advise regarding my problem I have this kind of data file.txt 111111111,20 111111111,50 222222222,70 333333333,40 444444444,10 444444444,20 I need to get this file1.txt 111111111,70 222222222,70 333333333,40 444444444,30 using this code I can... (6 Replies)
Discussion started by: reks
6 Replies

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

8. UNIX for Dummies Questions & Answers

Select 2 columns and transpose row by row

Hi, I have a tab-delimited file as follows: 1 1 2 2 3 3 4 4 a a b b c c d d 5 5 6 6 7 7 8 8 e e f f g g h h 9 9 10 10 11 11 12 12 i i j j k k l l 13 13 14 14 15 15 16 16 m m n n o o p p The output I need is: 1 1 a a 5 5 e e 9 9 i i 13... (5 Replies)
Discussion started by: mvaishnav
5 Replies

9. Shell Programming and Scripting

Sum up values of columns in 4 files using shell script

I am new to shell script.I have records like below in 4 different files which have about 10000 records each, all records unique and sorted based on column 2. 1 2 3 4 5 6 --------------------------- SR|1010478|000044590|1|0|0| SR|1014759|000105790|1|0|0| SR|1016609|000108901|1|0|0|... (2 Replies)
Discussion started by: reach.sree@gmai
2 Replies

10. Shell Programming and Scripting

Sum of values coming in a row

Hi, my requirement is to sum values in a row. eg: input is: sum,value1,value2,value3,.....,value N Required Output: sum,<summation of N values> Please help me... (5 Replies)
Discussion started by: MrGopal666
5 Replies
Login or Register to Ask a Question