awk and sum


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk and sum
# 1  
Old 01-22-2018
awk and sum

This is my file

Code:
vol0 285GB
vol0.snapshot 15GB
vol11_root 0GB
vol12_root 47GB
vol12_root.snapshot 2GB

I need the output

Code:
vol0 285GB,vol0.snapshot 15GB,sum-300GB
vol11_root 0GB,nosnap,sum-0Gb
vol12_root 47GB,vol12_root.snapshot 2GB,49GB

I was trying to use paste -d, --. But i having issue i need take only the line which has .snapshot and if no shapshot found i need to add has nosnap

For adding the value of two data and provide has SUM no idea how to do
# 2  
Old 01-22-2018
Quote:
Originally Posted by ranjancom2000
This is my file

Code:
vol0 285GB
vol0.snapshot 15GB
vol11_root 0GB
vol12_root 47GB
vol12_root.snapshot 2GB

I need the output

Code:
vol0 285GB,vol0.snapshot 15GB,sum-300GB
vol11_root 0GB,nosnap,sum-0Gb
vol12_root 47GB,vol12_root.snapshot 2GB,49GB

I was trying to use paste -d, --. But i having issue i need take only the line which has .snapshot and if no shapshot found i need to add has nosnap

For adding the value of two data and provide has SUM no idea how to do
What operating system are you using?

What shell are you using?

What did you try with paste?

How are we supposed to guess when the sum is to be printed with "GB" and when it is to be printed with "Gb"?

How are supposed to guess when "sum-" is to be included in the output and when it is to be omitted?

Are all numbers to be added given as "GB" values? Or could "KB", "MB", "TB" and/or other multipliers be present?
# 3  
Old 01-22-2018
What operating system are you using?
I am using cywin

What shell are you using?

shell

What did you try with paste?

cat file|paste -d, - - (I used this command to append both lines but the issue some lines dont have snapshot details)

How are we supposed to guess when the sum is to be printed with "GB" and when it is to be printed with "Gb"?
All will in GB

How are supposed to guess when "sum-" is to be included in the output and when it is to be omitted?

One i get the two date
"vol0 285GB,vol0.snapshot 15GB" using awk to sum the integer

Are all numbers to be added given as "GB" values? Or could "KB", "MB", "TB" and/or other multipliers be present?[/QUOTE]
# 4  
Old 01-22-2018
Here is one approach:-
Code:
awk '
        {
                match ( $0, /vol[0-9]*/ )
                vol = sprintf ( "%s", substr( $0, RSTART, RLENGTH ) )
        }
        !/snapshot/ {
                A[vol FS "orig"] = $0
                T[vol] += ( $NF + 0 )
        }
        /snapshot/ {
                A[vol FS "snap"] = $0
                T[vol] += ( $NF + 0 )
        }
        END {
                for ( k in T )
                        print A[k FS "orig"], A[k FS "snap"] ? A[k FS "snap"] : "no snap", "sum-" T[k] "Gb"


        }
' OFS=, file

# 5  
Old 01-22-2018
another:
Code:
awk '
{
   w=$1; sub("[.].*", "", w);
   if(! a[w]) {b[c++]=w; g=0;}
   a[w]=a[w] $0 ",";
   if ($NF ~ /[0-9]*GB$/) {l=$NF; gsub("[^0-9]", "", l); s[w]=(g+=l);}
}
END {
   for (i=0; i<c; i++) {
      print a[b[i]] ((a[b[i]] ~ /snapshot/) ? "" : "nosnap,") "sum-" s[b[i]] "GB";
   }
}
' datafile

This User Gave Thanks to rdrtx1 For This Post:
# 6  
Old 01-22-2018
Or
Code:
awk '
BG      {BG = 0
         if (/snap/)    {SUM += $2
                         printf "%s,sum-%dGB\n", $0, SUM
                         SUM = 0
                         next
                        }
         else            printf "%s,sum-%dGB\n", "nosnap", SUM
         SUM = 0
        }
!BG     {printf "%s,", $0
         SUM += $2
         BG = 1
        }
' file

# 7  
Old 01-22-2018
Quote:
Originally Posted by rdrtx1
another:
Code:
awk '
{
   w=$1; sub("[.].*", "", w);
   if(! a[w]) {b[c++]=w; g=0;}
   a[w]=a[w] $0 ",";
   if ($NF ~ /[0-9]*GB$/) {l=$NF; gsub("[^0-9]", "", l); s[w]=(g+=l);}
}
END {
   for (i=0; i<c; i++) {
      print a[b[i]] ((a[b[i]] ~ /snapshot/) ? "" : "nosnap,") "sum-" s[b[i]] "GB";
   }
}
' datafile


I can believe this works great. But still i dont know how it works
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk - Print Sum

Hi, I have an awk command that I am using, and part of it sums COL_9 however when I read the output it is not including decimal places; awk ' BEGIN{FS=OFS=","} NR==1{print;next} {a+=$9 c = $12 d = $18 } END{for(i in a) {split(i,b,";"); print $1, $2, $3, b, $5, $6, b, b, a, $10, $11,... (1 Reply)
Discussion started by: Ads89
1 Replies

2. Post Here to Contact Site Administrators and Moderators

awk to sum in Loop

i want code in awk with loop to get the sum * is delimiter in file TOTAL_AMOUNT=SUM(CLP04) suppose there are 12 CLP04 segment in my file i want to add upto 5 CLP04 then print next line after BPR segment after calculate the total amount CLP04 means ex ... (5 Replies)
Discussion started by: MOHANP12
5 Replies

3. Shell Programming and Scripting

How to sum the matrix using awk?

input A1 B1 A2 B2 0 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 Output label A1 B1 A2 B2 A1 2 1 1 2 B1 1 2 2 1 A2 1 2 3 2 B2 2 1 2 3 Ex: The number of times that A1 and B1 row values are both 1 should be printed as output. The last row of A1 and B1 in the input match by having 1 in both... (4 Replies)
Discussion started by: quincyjones
4 Replies

4. Shell Programming and Scripting

Sum value using sed or awk ?

Hello all, how would one go about writing a command using sed/awk that will give me an output that can sum up the number of time each user has done something and also add the amount of time... so output would be for example "smiths has run 3 process and for time taken of value: 224" ... (5 Replies)
Discussion started by: crazy_max
5 Replies

5. Shell Programming and Scripting

awk and count sum ?

I have a input.txt file which have 3 fields separate by a comma place, os and timediff in seconds tampa,win7, 2575 tampa,win7, 157619 tampa,win7, 3352 dallas,vista,604799 greenbay,winxp, 14400 greenbay,win7 , 518400 san jose,winxp, 228121 san jose,winxp, 70853 san jose,winxp, 193514... (5 Replies)
Discussion started by: sabercats
5 Replies

6. UNIX for Dummies Questions & Answers

awk question about sum

Hi everyone, i need help with a simple task. I have a file withe the format: "01/20/2012 23:10:13.979","49","49","48","19" "01/20/2012 23:15:13.969","47","47","48","18" "01/20/2012 23:20:13.975","47","47","45","17" "01/20/2012 23:25:13.980","44","44","44","17" "01/20/2012... (3 Replies)
Discussion started by: civilianwarfare
3 Replies

7. Shell Programming and Scripting

Sum using awk

Hi all, I need to sum values for fields in a delimited file as below: 2010-03-05||| 2010-03-05|||123 2010-03-05|467.621|369.532| 2010-03-06||| 2010-03-06||2| 2010-03-06|||444 2010-03-07||| 2010-03-07||| 2010-03-07|655.456|1019.301| Code used is: nawk -F "|" ' { sum +=... (7 Replies)
Discussion started by: Katabatic
7 Replies

8. Shell Programming and Scripting

scripting/awk help : awk sum output is not comming in regular format. Pls advise.

Hi Experts, I am adding a column of numbers with awk , however not getting correct output: # awk '{sum+=$1} END {print sum}' datafile 2.15291e+06 How can I getthe output like : 2152910 Thank you.. # awk '{sum+=$1} END {print sum}' datafile 2.15079e+06 (3 Replies)
Discussion started by: rveri
3 Replies

9. Shell Programming and Scripting

Sum with awk

Hi,consider this fields, $1 $2 $3 981 0 1 984 0 4 985 1 0 987 0 2 990 0 0 993 0 3 995 2 0 996 0 1 999 0 4 for each occurence of zero in column $2 and $3 I need to sum $1 fields, so for example, in this piece of code the result of $1 is 8910. I'm sure... (2 Replies)
Discussion started by: cv313x
2 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