Sum up formatted numbers with comma separation


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sum up formatted numbers with comma separation
# 1  
Old 05-27-2019
Sum up formatted numbers with comma separation

I need to sum up the values in field nr 5 in a data file that contains some file listing. The 5th field denotes the size of each file and following are some sample values.

Code:
1,775,947,633
4,738
7,300
16,610
15,279
0
0

I tried the following code in a shell script.
Code:
awk '{sum+=$5} END{print sum}' mylogfile.log

But it does not add up the numbers. The result is the sum of values until it encounters the first comma in each of the numbers.

I also tried doing a substitution before summing up (as below), but even that did not give expected result.

Code:
awk '{sum+=gsub(",", "", $5)} END{print sum}' mylogfile.log

Please suggest if you have encountered such a scenario.
# 2  
Old 05-27-2019
Hi, did I understand correctly?
Code:
awk -F, 'NR == 5 {for(i = 1; i <= NF; i++) sum+=$i; print sum}' file
294

--- Post updated at 10:30 ---

Code:
awk '{sum = 0; t = split($5, arr, ","); for(i = 1; i <= t; i++) sum+=arr[i]; print sum}' file

fixed

Last edited by nezabudka; 05-27-2019 at 04:36 AM..
# 3  
Old 05-27-2019
Not exactly. To explain further, following is the input data.

Code:
1,775,947,633
4,738
7,300
16,610
15,279
0
0

Expected output is (sum of all the numbers):
Code:
1775991560

I am trying to achieve this using awk.

--- Post updated at 02:14 PM ---

solved this using gsub by correcting my arguments to gsub as follows.

Code:
awk '{gsub(/,/,"",$5);sum+=$5} END{print sum}' file

Result:
Code:
1775991560

# 4  
Old 05-27-2019
Code:
awk {gsub(",", "", $5); sum+=$5} END {print sum}' file

may be not "$5" field
Code:
awk {gsub(",", ""); sum+=$0} END {print sum}' file


Last edited by nezabudka; 05-27-2019 at 05:50 AM..
# 5  
Old 05-27-2019
Supposed you only show $5 it is
Code:
awk '{gsub(",", "", $5); sum+=$5} END{print sum}' mylogfile.log

The gsub() returns the number of performed substitutions, not the result string. The result is stored in the input variable, here $5.

Because modification of an input field like $5 causes a reformatting of $0, it sometimes makes sense to have an extra variable.
A demonstration:
Code:
awk '{x=$5; gsub(",", "", x); sum+=x; print} END{print sum}'

Compare with
Code:
awk '{gsub(",", "", $5); sum+=$5; print} END{print sum}'

These 2 Users Gave Thanks to MadeInGermany For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Split files with formatted numbers

How to split the file and have suffix with formatted numbers Tried the following code awk '{filename="split."int((NR-1)/2)".txt"; print >> filename}' split.txt Current Result Expected Result (21 Replies)
Discussion started by: bobbygsk
21 Replies

2. Shell Programming and Scripting

Sum of numbers in three or more files

I have files : cat file1 15 88 44 667 33 4cat file2 445 66 77 3 56 (12 Replies)
Discussion started by: Natalie
12 Replies

3. Shell Programming and Scripting

Removing comma just from numbers

Hi Guys, I want to remove commas from just the numbers in the file. So both sides of the comma should be numbers. Input file Johan 1,234 nb jan 123,3 hi, hello, bye 12,345,54 hejhej Desired output: Johan 1234 nb jan (6 Replies)
Discussion started by: Johanni
6 Replies

4. Shell Programming and Scripting

Sum Numbers from different files

Hi All, I need to print the sum of numbers from different files. Input files: file1.out 10 20 30 file2.out 10 20 30 (5 Replies)
Discussion started by: saint2006
5 Replies

5. Shell Programming and Scripting

getting the sum of numbers

I basically have a file where I had to do a bunch of greps to get a list of numbers example: a file called numbers.txt 10000 10000 superman 10000 batman 10000 10000 grep '100' * | 10000 10000 10000 10000 10000 (2 Replies)
Discussion started by: zerofire123
2 Replies

6. Shell Programming and Scripting

Finding the sum of two numbers

cat *.out |grep "<some text>" | awk '{print $6}' For ex,This will reutrn me 11111 22222 is it possible to add these two numbers in the above given command itself?I can write this to a file and find the sum. But I prefer to this calculation in the above given line itself. Any... (3 Replies)
Discussion started by: prasperl
3 Replies

7. Shell Programming and Scripting

Extracting formatted text and numbers

Hello, I have a file of text and numbers from which I want to extract certain fields and write it to a new file. I would use awk but unfortunately the input data isn't always formatted into the correct columns. I am using tcsh. For example, given the following data I want to extract: and... (3 Replies)
Discussion started by: DFr0st
3 Replies

8. Shell Programming and Scripting

sum numbers from stdout

hello im looking for short way to sum numbers from stdout the way i found to do it is to long for me i wander if there is shorter way to do it ok it 2 stage action this will make the list of number in to file sum.txt grep -c include *.c | awk '{l=split($0,a,":");print a;}' > sum.txt this... (1 Reply)
Discussion started by: umen
1 Replies

9. Shell Programming and Scripting

Joining three lines with comma separation

I have a file that looks like this: G. KRESSLAR 9618 W. APPALOOSA DRIVE SUN CITY, AZ 85373 SHIRLEY ALLEN 7272 W. VIA MONTOYA DRIVE GLENDALE, AZ 85310 LOUIS VALDEZ 244441 N. 86TH AVENUE PEORIA, AZ 85383 DONNA NEWBON 3231 W. DENTON #D PHOENIX, AZ 85017 SARAH WILSON 6534 W. PALO... (3 Replies)
Discussion started by: BCarlson
3 Replies

10. Shell Programming and Scripting

how to sum numbers in column

Hi, i want to sum all nubers in one column. Example: 12.23 11 23.01 3544.01 I'm trying to do this in awk, but it doesn't work properly. Seems like awk is summing only integers, for example: 12 11 23 3544 It cuts off numbers after dot. I used this command: akw /text/ file.txt |nawk... (1 Reply)
Discussion started by: iahveh
1 Replies
Login or Register to Ask a Question