Help with calculate the total sum of record in column one


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with calculate the total sum of record in column one
# 1  
Old 09-13-2016
Help with calculate the total sum of record in column one

Input file:
Code:
101M
10M10D20M1I70M
10M10D39M4I48M
10M10D91M
10M10I13M2I7M1I58M
10M10I15M1D66M

Output file:
Code:
101M 101 0 0
10M10D20M1I70M 100 1 10
10M10D39M4I48M 97 4 10
10M10D91M 101 0 10
10M10I13M2I7M1I58M 88 13 0
10M10I15M1D66M 91 10 1

I'm interested to count how many total of M, I, D at column one and output it at another file.
At the desired output file, first column is the original raw file record and second column is total number of M in column one, third column is total number of I in column one and forth column is total number of D in column one.

eg. 10M10D20M1I70M can be interpret as 10M 10D 20M 1I 70M. So the final desired output is 10M10D20M1I70M 100 1 10
10M10I13M2I7M1I58M can be interpret as 10M 10I 13M 2I 7M 1I 58M. So the final desired output is 10M10I13M2I7M1I58M 88 13 0

I can't think any idea to calculate the sum of M, I, D at column one by using awk, perl one liner command yet.
Thanks for any advice.

Last edited by perl_beginner; 09-14-2016 at 05:07 AM.. Reason: Typo error
# 2  
Old 09-13-2016
Hello perl_beginner,

I have a few to questions pose in response first:-
  • Is this homework/assignment? There are specific forums for these.
  • What have you tried so far?
  • What output/errors do you get?
  • What OS and version are you using?
  • What are your preferred tools? (C, shell, awk, etc. or perl perhaps Smilie)
  • What logical process have you considered? (to help steer us to follow what you are trying to achieve)
Most importantly, What have you tried so far?

There are probably many ways to achieve most tasks, so giving us an idea of your style and thoughts will help us guide you to an answer most suitable to you so you can adjust it to suit your needs in future.

Can I assume that the alphabetic characters are used to split up the numerics you wish to total?


We're all here to learn and getting the relevant information will help us all.



Kind regards,
Robin
# 3  
Old 09-13-2016
Dear Robin,

This is no home work/assignment.
Basically it is just an output of a program.
But I'm interested to know it in further detail.

I can't think out a solution yet.
What I plan is:
  1. Separate alphabetic characters by tab delimiter;
  2. eg. 10M10D91M become 10 M 10 D 91 M
  3. Look for numeric value before alphabetic characters separately;
    • eg. 10 M 10 D 91 M
    • If look for M. It become 10 91
    • If look for I. It become
    • If look for D. It become 10
  4. Sum the output separately
    • If look for M. It become 101
    • If look for I. It become
    • If look for D. It become 10
  5. Print the original column one at output file first column followed by total sum of M, I, and D;
  6. If any column is empty then print 0;

Basically this is how I think to archive my goal.
Thanks.

Last edited by rbatte1; 09-13-2016 at 09:44 AM.. Reason: Added ICODE tags and conerted text list into formatted numbered list with sub-bullet lists
# 4  
Old 09-13-2016
Hello perl_beginner,

Thank you for posting your approach to solve this problem. Please always do post the codes which you have tried to solve your problem, even they are not working ones, it is not a harm to show your efforts. As we all are here to learn. Following may help you in same.
Code:
awk '{p=$0;gsub(/M|I|D/,"& ",$0);for(i=1;i<=NF;i++){Q=$i;gsub(/[[:alpha:]]/,X,Q);gsub(/[[:digit:]]/,X,$i);A[$i]=A[$i]?A[$i]+Q:Q};printf ("%s %01d %01d %01d\n",p,A["M"],A["I"],A["D"]);for(i in A){delete A[i]}}'  Input_file
OR
awk '{
        p=$0;
        gsub(/M|I|D/,"& ",$0);
        for(i=1;i<=NF;i++){
                                Q=$i;
                                gsub(/[[:alpha:]]/,X,Q);
                                gsub(/[[:digit:]]/,X,$i);
                                A[$i]=A[$i]?A[$i]+Q:Q
                          };
        printf("%s %01d %01d %01d\n",p,A["M"],A["I"],A["D"]);
        for(i in A)       {
                                delete A[i]
                          }
     }
    '   Input_file

Output will be as follows.
Code:
101M 101 0 0
10M10D20M1I70M 100 1 10
10M10D39M4I48M 97 4 10
10M10D91M 101 0 10
10M10I13M2I7M1I58M 88 13 0
10M10I15M1D66M 91 10

Thanks,
R. Singh

Last edited by RavinderSingh13; 09-13-2016 at 10:16 AM..
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Old 09-13-2016
Thanks, R. Singh.
Let me have a try and get back to you soon Smilie

My method normally I will split the analysis into a lot of different step and output it one by one before getting final desired output.
Hope it is fine too ^.^
# 6  
Old 09-13-2016
Try also
Code:
awk '
        {split ("", SUM)
         n = split ($0, T1, /[MID]/)
         m = split ($0, T2, /[0-9]+/)
         for (i=n-1; i>0; i--) SUM [T2[i+1]]+=T1[i]
         print $0, SUM["M"]+0, SUM["I"]+0, SUM["D"]+0
        }
' file
101M 101 0 0
10M10D20M1I70M 100 1 10
10M10D39M4I48M 97 4 10
10M10D91M 101 0 10
10M10I13M2I7M1I58M 88 13 0
10M10I15M1D66M 91 10 1

Your output file is not consistent in the order of M, I, D fields...
This User Gave Thanks to RudiC For This Post:
# 7  
Old 09-14-2016
Thanks, R. Singh.

Your awk command work perfectly for my case Smilie

---------- Post updated at 03:09 AM ---------- Previous update was at 03:08 AM ----------

Hi RudiC,

You are right.
I just edit the record that have problem about the order of M, I, D.

Thanks to remind me.
Your awk command work fine also ^.^
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Sum the total based on ID

Hi I am having a set of files which will have the card details and the amount that was spending on the card. Each file will have the set of cards and dollar amount spend on it. I am trying to sum the dollar values by card number on each files. Is there a way I do it all in all one steps File... (1 Reply)
Discussion started by: arunkumar_mca
1 Replies

2. UNIX for Dummies Questions & Answers

Match sum of values in each column with the corresponding column value present in trailer record

Hi All, I have a requirement where I need to find sum of values from column D through O present in a CSV file and check whether the sum of each Individual column matches with the value present for that corresponding column present in the trailer record. For example, let's assume for column D... (9 Replies)
Discussion started by: tpk
9 Replies

3. Shell Programming and Scripting

Calculate the total

Hi All , I have the following script as below , I tried to modify to meet the requirement , could someone help ? very thanks ================================================================================================ while read STR NAME; do Total=0 MyString="$STR" GetData () {... (18 Replies)
Discussion started by: ust3
18 Replies

4. Shell Programming and Scripting

Calculate total value from a row

HI I have a file # cat marks.txt MARKS LIST 2013 Name english french chinese latin total_marks wer 34 45 67 23 wqa 12 39 10 56 wsy 23 90 23 78 Now i need to find the total marks of each student using... (11 Replies)
Discussion started by: Priya Amaresh
11 Replies

5. Shell Programming and Scripting

Help with sum total number of record and total number of record problem asking

Input file SFSQW 5192.56 HNRNPK 611.486 QEQW 1202.15 ASDR 568.627 QWET 6382.11 SFSQW 4386.3 HNRNPK 100 SFSQW 500 Desired output file SFSQW 10078.86 3 QWET 6382.11 1 QEQW 1202.15 1 HNRNPK 711.49 2 ASDR 568.63 1 The way I tried: (2 Replies)
Discussion started by: patrick87
2 Replies

6. Shell Programming and Scripting

Help with calculate total sum of same data problem

Long list of input file: AGDRE1 0.1005449050 AGDRE1 2.1005443435 AGDRE1 1.2005449050 AGDRE1 5.1005487870 AASFV3 50.456304789 AASFV3 2.3659706549 AASFV3 6.3489807860 AASFV3 3.0089890148 RTRTRS 5.6546403546 . . Desired output file: AGDRE1 8.5021829410 AASFV3 62.180245240... (2 Replies)
Discussion started by: perl_beginner
2 Replies

7. Shell Programming and Scripting

Calculate total space, total used space and total free space in filesystem names matching keyword

Good afternoon! Im new at scripting and Im trying to write a script to calculate total space, total used space and total free space in filesystem names matching a keyword (in this one we will use keyword virginia). Please dont be mean or harsh, like I said Im new and trying my best. Scripting... (4 Replies)
Discussion started by: bigben1220
4 Replies

8. Shell Programming and Scripting

Calculate total sum from a file

The file content is dynamic and using this format: name1 number1 name2 number2 name3 number3 name4 number4 .................... Need a smooth way to calculate the sum of all the numbers in that file (number1 + number2 + number3 + number4........ = total ) (11 Replies)
Discussion started by: TehOne
11 Replies

9. Shell Programming and Scripting

sum total by column

Hi, i have a file which content the following: >cat cols data a:23:data data b:76:data data c:-30:data i would like to sum up the value of column 2, but the result that return to me is 0. Can anyone help? i'm using this code to do the sum awk -F" " 'BEGIN {x=0} {x+=$2} END {print... (5 Replies)
Discussion started by: thh
5 Replies
Login or Register to Ask a Question