Visit Our UNIX and Linux User Community


Sum the fields with 6 decimal places - getting only 2 decimal places as output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sum the fields with 6 decimal places - getting only 2 decimal places as output
# 1  
Old 02-15-2018
Sum the fields with 6 decimal places - getting only 2 decimal places as output

I used the below script to Sum up a field in a file based on some unique values. But the problem is when it is summing up the units, it is truncating to 2 decimals and not 6 decimals as in the input file (Input file has the units with up to 6 Decimals – Sample data below, when the units in the 2 rows below highlighted in red are added, I only get 2 decimal places 18.34).

Code:
awk -F "|" '{a[$2$3$4$5$6$7]+=$8;}END{for(i in a)print i"|"a[i];}' File1  > File2  
echo File2

|ACCT1 | XX | 00548  |02/13/2018 |548JN4 |L |18.424000
|ACCT2 | XY | 00551  |02/13/2018 |540JC7 |L |315.809000
|ACCT3 | XX | 00639  |02/13/2018 |368024 |L |4.000000
|ACCT4 | XX | 00652  |02/13/2018 |546QD4 |L |35.212000
|ACCT5 | XY | 00663  |02/13/2018 |5210E1 |L |16.242000
|ACCT5 | XY | 00663  |02/13/2018 |5210E1 |L |2.102000




Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules!

Last edited by RudiC; 02-15-2018 at 06:06 PM.. Reason: Added CODE tags.
# 2  
Old 02-15-2018
Welcome to the forum.

For your problem, try
Code:
awk -F "|" '{a[$2$3$4$5$6$7]+=$8;}END{for(i in a)print i"|"a[i];}' CONVFMT="%.6f" file1
ACCT1  XX  00548  02/13/2018 548JN4 L |18.424000
ACCT2  XY  00551  02/13/2018 540JC7 L |315.809000
ACCT3  XX  00639  02/13/2018 368024 L |4
ACCT5  XY  00663  02/13/2018 5210E1 L |18.344000
ACCT4  XX  00652  02/13/2018 546QD4 L |35.212000

This User Gave Thanks to RudiC For This Post:
# 3  
Old 02-15-2018
Code:
awk -F "|" '{a[$2$3$4$5$6$7]+=$8;}END{for(i in a)printf "%s|%.6f\n",  i, a[i]}' File1

This User Gave Thanks to rdrtx1 For This Post:
# 4  
Old 02-21-2018
Sum the fields with 6 decimal places - numbers with all zeroes after the decimal is truncated

Thank you for your help. this really works in terms of adding.

But, I have a new problem where if it is all zeroes after the decimal, then it truncated.

for example, if the value is 4.000000, then the result I get is 4.

But I want the output to be 4.000000




Quote:
Originally Posted by RudiC
Welcome to the forum.

For your problem, try
Code:
awk -F "|" '{a[$2$3$4$5$6$7]+=$8;}END{for(i in a)print i"|"a[i];}' CONVFMT="%.6f" file1
ACCT1  XX  00548  02/13/2018 548JN4 L |18.424000
ACCT2  XY  00551  02/13/2018 540JC7 L |315.809000
ACCT3  XX  00639  02/13/2018 368024 L |4
ACCT5  XY  00663  02/13/2018 5210E1 L |18.344000
ACCT4  XX  00652  02/13/2018 546QD4 L |35.212000

# 5  
Old 02-21-2018
use printf instead:
Code:
awk -F "|" '{a[$2$3$4$5$6$7]+=$8;}END{for(i in a)printf("%s%s%.6f\n",  i, OFS, a[i];}' OFS='|' file1


Previous Thread | Next Thread
Test Your Knowledge in Computers #185
Difficulty: Medium
Moderating questions and answers at UNIX.com requires superior UNIX shell scripting abilities.
True or False?

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Calculate the constant e to 14+ decimal places using integer maths.

Hi guys... I am loving this integer maths thing. 64 bit systems are certainly easier than 32 bit, but hey, I don't intend to leave out my fav' platform. Using one of the 'Brothers' methods, URL inside the code. #!/bin/sh # # #!/usr/local/bin/dash # e_constant.sh # Brother's formula . #... (2 Replies)
Discussion started by: wisecracker
2 Replies

2. Shell Programming and Scripting

Printing with decimal places from last 4 digits

I have input file like below, 201424|9999|OSS|622010|RGT|00378228764 201424|8888|OM|587079|RGT|00284329675 201424|7777|OM|587076|RGT|00128671024 201424|6666|OM|581528|RGT|00113552084 Output should be like below, should add decimal (.) from last 4 digits. ... (2 Replies)
Discussion started by: vinothsekark
2 Replies

3. Shell Programming and Scripting

How to round up value upto 2 decimal places using sed?

Please help me in rounding up value upto 2 decimal palces using sed command #!/usr/bin/bash a=15.42 b=13.33 c=`echo $a*$b |bc -l` echo $c above code is is giving output "205.5486" but i want the output as "205.55" Thank you... (15 Replies)
Discussion started by: ranabhavish
15 Replies

4. Shell Programming and Scripting

Bash Rounding to 2 decimal places

I have a number in a bash variable n, and want to round it to 2 decimal places. How can I do that? n=0.0867268 Need to have num=0.09 (1 Reply)
Discussion started by: kristinu
1 Replies

5. Shell Programming and Scripting

Arithmetic but keep 2 decimal places

I am trying to perform arithmetric, for example, to increment the value of variable $a (say 3) by 0.05 but when I tried the following expression let a=a+0.05 or a=$((a+0.05)) both returned 3.0499999999999998 I want to keep 2 decimal places so it returns 3.05 instead. (6 Replies)
Discussion started by: piynik
6 Replies

6. Shell Programming and Scripting

Decimal places

i need to multiplay a number with 1.00.. so that the output should contain two decimal places at end.. for example... 236 * 1.00 = 236.00 245.8 * 1.00 = 245.80 but when i perform multiplication it shows output as. 236 245.8 can anyone help me to get the actual output of... (11 Replies)
Discussion started by: arunmanas
11 Replies

7. Shell Programming and Scripting

Four decimal places with awk

i have a script in which awk prints "($2-1700)/10000" and the answer is -0.07,but i want the answer in 4 decimal places. that is -0.0700. How can i sue awk to get my results in four decimal places (4 Replies)
Discussion started by: tomjones
4 Replies

8. Shell Programming and Scripting

Using the "Less Than" (-lt) switch on numbers with decimal places?

I'm using shell scripts to run some commands for the Configuration Management tool called Telelogic Synergy. I need to get the script to compare version numbers of files. The version numbers of the files are part of the actual filename, such as the following example: example_file-1... (7 Replies)
Discussion started by: Glyn_Mo
7 Replies

9. Shell Programming and Scripting

trimm up the decimal places in output

I have a perl script that reports the avg time of a application call and the total number of calls. This works fine, however I would like to trim the number of decimal places reported from 12 to like 3 and I don't know how. Any suggestions? Here is what I use to get the avg time... for $eRef (... (2 Replies)
Discussion started by: theninja
2 Replies

Featured Tech Videos