Visit Our UNIX and Linux User Community


Summing all fields in a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Summing all fields in a file
# 1  
Old 05-15-2013
Summing all fields in a file

I was playing around to see how stuff works, and was trying to sum all fields in a file.
Code:
cat file
1 2 3 4
5 6 7 8
9 10 11 12

I made this script:
Code:
awk 'BEGIN {OFS=RS}{$1=$1}{s+=$0} END {print "sum="s}' file

This gives 15, why not 78?

I test it like this
Code:
awk 'BEGIN {OFS=RS}{$1=$1}{s+=$0;print $0} END {print "sum="s}'
1
2
3
4
5
6
7
8
9
10
11
12
sum=15

It only sums up column #1, even when print $0 shows all number, why?

Edit: I know this works, but I was thinking of skipping the internal loop
Code:
awk '{for (i=1; i<=NF; i++) s=s+$i}; END{print s}'

# 2  
Old 05-15-2013
As far as I know changing the OFS (Output Field Separator) to RS (Input Record Separator, a newline by default) and rebuilding will only alter the way awk print the records.

It will not make any difference in the original record which awk read and stored internally in its memory.

This is the reason why you get expected output while printing, but not while computing the sum.
# 3  
Old 05-15-2013
further to Yoda, I think $0 would still contain as the original input record and performing maths would result on the integer part ( int($0) would return $1 ) in this case. (others please correct me here if this is not the case)

You have to play with RS

Code:
awk 'BEGIN {RS="[ \n]"} {s+=$0} END  {print s}' file


AFAIK, I guess multi-character RS is supported only by gnu awk ( though not very much sure).
# 4  
Old 05-15-2013
the easiest is:
Code:
tr ' ' '\n' < myFile| awk '{s+=$0}END {print "sum="s}'
OR
echo `sed -e 's/$/+/;s/ /+/g' myFile` 0 | bc

This gets you a bit closer, but.... as noted above you'll have to play with RS/FS:
Code:
awk 'BEGIN {RS=FS}{$1=$1}{s+=$0} END {print "sum="s}' myFile


Last edited by vgersh99; 05-15-2013 at 12:24 PM..
# 5  
Old 05-15-2013
Quote:
awk 'BEGIN {RS=FS}{$1=$1}{s+=$0} END {print "sum="s}' myFile
This gives sum=64, so there are some missing to get to 78
# 6  
Old 05-17-2013
I guess It's not woking because of taking field separater everytime instead when it is going to new Line. anybody correct me if i am wrong.

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

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

2. UNIX Desktop Questions & Answers

Summing file sizes

I was just curious about how to sum the total file size of a certain type of file. For instance: $find . -name "*.aif" will print out the paths to each .aif file. Instead of printing, how could one sum the total space used by all of the aif files? Thanks! Please use code tags (3 Replies)
Discussion started by: Alexander4444
3 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. UNIX for Dummies Questions & Answers

Summing lines in a file

Can anyone tell me how sum values in each record of a file and append that value to the end? For instance a typical record will be: FY12,Budget,771100,,,,,,,,,250,-250 I'd like the record to become FY12,Budget,771100,,,,,,,,,250,-250,0 which can be put into another file. Thank you. (6 Replies)
Discussion started by: LearningLinux2
6 Replies

5. Homework & Coursework Questions

HELP with Unix scripts in summing columns in a file

1. The problem statement, all variables and given/known data: Hi guys, i'm a new guy here, and it's my first time creating a unix script. can you guys help me out here? i'd really appreciate it. :( Here's my problem: This is the file i'm using, it has 6 columns, the first three columns are... (12 Replies)
Discussion started by: ramneim
12 Replies

6. Homework & Coursework Questions

HELP with Unix scripts in summing columns in a file.

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Hi guys, i'm a new guy here, and it's my first time creating a unix script. can you guys help me out here? i'd... (3 Replies)
Discussion started by: ramneim
3 Replies

7. Shell Programming and Scripting

awk sed cut? to rearrange random number of fields into 3 fields

I'm working on formatting some attendance data to meet a vendors requirements to upload to their system. With some help on the forums here, I have the data close. But they've since changed what they want. The vendor wants me to submit three fields to them. Field 1 is the studentid field,... (4 Replies)
Discussion started by: axo959
4 Replies

8. Shell Programming and Scripting

summing up the fields in fixed width file

Hi, I have a fixed width file with some records as given below: " 1000Nalsdjflj243324jljlj" "-0300Njfowjljl309933fsf" " 0010Njsfsjklj342344fsl" I want to sum-up first field values(i.e from 2nd character to 6th character)of each record. so for the above file i want to add (1000 - 300+... (2 Replies)
Discussion started by: srilaxmi
2 Replies

9. UNIX for Advanced & Expert Users

Summing file size and output

:rolleyes:Hi, I need to find the sum of size of specific files in my directory Say for ex, mydir$ ls -ltr permisssion links user group size date time filename I want to display the sum of size of filenames having pattern "TS55". Note file size in this directory is near 400 MB. mydir$... (1 Reply)
Discussion started by: ramkrix
1 Replies

10. Shell Programming and Scripting

Summing the columns of a file

Hi All, I have a file like - num.txt 12, 34, 65, line1 34, 65, 89, line2 43, 65, 77, line3 I want to do two things - 1. Add first three columns of each line and print the line with largest value. i.e. (12+34+65) for 1st line and so on. 2. Add middle column of each line i.e.... (3 Replies)
Discussion started by: asahlot
3 Replies

Featured Tech Videos