Sponsored Content
Top Forums Shell Programming and Scripting Calculate the performance of employee Post 303037638 by wisecracker on Thursday 8th of August 2019 12:45:55 PM
Old 08-08-2019
Hi rohit_shinez...
(Apologies for any typos.)
In bash? Hmm, awk - most probably as it has builtin scientific maths and floating point capability, but I am no expert.
Bash has ONLY integer maths and that is its limitation. As I quoted before if you have access to tools/utilities that can do floats, Python, Perl, bc, dc, or others then it is possible as is creating your own FIXED point maths calculator. (Note: 'maths' as I am UKan.)
A simple fully POSIX compliant example of making a floating point number divided by an integer like your case. All values are global here to make for an easy to understand to the problems involved if you don't have any decent tools to manipulate scientific and FP values.
Also POSIX does NOT allow x**y hence the multiplier function. Fortunately 'bash' CAN handle this in integer mode only but not shown:
Code:
#!/usr/local/bin/dash

NUMBER=0
M=0
N=0
MULTIPLIER=1
TIMES_TEN=10
POWER=1
NO_DECIMAL=1

remove_decimal_point()
{
    NUMBER=$1
    M=${NUMBER%.*}
    N=${NUMBER#*.}
    MULTIPLIER=${#N}
    NO_DECIMAL=${M}${N}
}

multiplier()
{
    TIMES_TEN=$1
    POWER=1
    while [ ${TIMES_TEN} -ge 1 ]
    do
        POWER=$(( POWER * 10 ))
        TIMES_TEN=$(( TIMES_TEN - 1 ))
    done
}

remove_decimal_point 321.12345678

multiplier ${MULTIPLIER}

echo "Variables as global for this demo..."
echo "${NUMBER}"
echo "${M}"
echo "${N}"
echo "${NO_DECIMAL}"
echo "${MULTIPLIER}"
echo "${TIMES_TEN}"
echo ""
echo "Two calculations..."
echo "Firstly: Convert back to original string..."
printf "%.8f\n" "$(( NO_DECIMAL ))e-${MULTIPLIER}"
echo "Secondly: Two integers being divided and converted to FLOAT string..."
printf "%.8f\n" "$(( NO_DECIMAL / 11 ))e-${MULTIPLIER}"
echo "Confirm using Python..."
python -c "print( 321.12345678 / 11 )"

Result for this maths dilemma: OSX 10.14.3, default bash terminal calling dash...
Code:
Last login: Thu Aug  8 16:51:21 on ttys000
AMIGA:amiga~> cd Desktop/Code/Shell
AMIGA:amiga~/Desktop/Code/Shell> ./Float_Test.sh
Variables as global for this demo...
321.12345678
321
12345678
32112345678
8
0

Two calculations...
Firstly: Convert back to original string...
321.12345678
Secondly: Two integers being divided and converted to FLOAT string...
29.19304152
Confirm using Python...
29.1930415255
AMIGA:amiga~/Desktop/Code/Shell> _

You now see your problem...
HOWEVER; as I also quoted 'ksh' supports floating point arithmetic, including, float**another_float , which I have used often...
Unless your system does NOT have Python support then the code you have already would probably be better suited translated to awk.
I will pass those thoughts on to our awk experts...
I hope this helps wrap things up...
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

bc calculate problem

Hi , this is the first time i use bc to calculate and i would have decimal result , i use the following : toto=400;scale=1 echo $toto / 1000|bc scale to adjust the numbers after the command would have in this case 0.4 as result and i wonder why i have always 0 as result. Somebody can... (2 Replies)
Discussion started by: Nicol
2 Replies

2. Shell Programming and Scripting

calculate output

I was wondering can anyone give me a clue how to start script which would do the following: I have 2 numbers as input for example: 100 and 1000 and I need to create file and in that file should be written 100 - 199 200 - 299 300 - 399 400 - 499 500 - 599 600 - 699 700 - 799... (3 Replies)
Discussion started by: amon
3 Replies

3. News, Links, Events and Announcements

Announcing collectl - new performance linux performance monitor

About 4 years ago I wrote this tool inspired by Rob Urban's collect tool for DEC's Tru64 Unix. What makes this tool as different as collect was in its day is its ability to run at a low overhead and collect tons of stuff. I've expanded the general concept and even include data not available in... (0 Replies)
Discussion started by: MarkSeger
0 Replies

4. Shell Programming and Scripting

calculate the space

Hi everyone, I need to write a script to calculate the space for sub-folders under /home: Here is the scanrio: cd /home drwxr-xr-x 57 root root 8192 Jan 22 16:13 home_1 drwxrwxrwx 69 root root 8192 Jan 29 10:36 home_2 drwxr-xr-x 97 root root 8192 Nov... (8 Replies)
Discussion started by: za_7565
8 Replies

5. Shell Programming and Scripting

How can i calculate percentage ??

i have 3 files like total.dat=18 equal.dat=14 notequal.dat=16 i need find the equal percentange means: equalpercentage = ($equal.dat / $total.dat * 100) How i can do this ? I tried some of the answers to calculate the percentage in this forums.but it couldn't worked.Some one please... (6 Replies)
Discussion started by: bobprabhu
6 Replies

6. Shell Programming and Scripting

How To Calculate

I have 2 variables in my shell scripts in which i am using awk and calculating 2 files and getting 2 different variable called in_total and out_total. I want to subtract one variable from another so plz tell me how i can do that. Example is: cat in_file | awk -F: '{ in_total += $1 * 86400... (3 Replies)
Discussion started by: krishna_sicsr
3 Replies

7. Shell Programming and Scripting

Calculate age of a file | calculate time difference

Hello, I'm trying to create a shell script (#!/bin/sh) which should tell me the age of a file in minutes... I have a process, which delivers me all 15 minutes a new file and I want to have a monitoring script, which sends me an email, if the present file is older than 20 minutes. To do... (10 Replies)
Discussion started by: worm
10 Replies

8. UNIX for Dummies Questions & Answers

Calculate

i have file input abcedef|wert|13|03|10|04|23|A1|13|05|01|09|31 fsdasdf|ferg|12|04|25|21|21|A1|13|02|26|20|31 dfsfsad|gerg|12|04|25|21|21|A1|13|02|25|25|31 i expect the output abcedef|wert|13|03|10|04|23|A1|13|05|01|09|31|9.516666667... (5 Replies)
Discussion started by: radius
5 Replies

9. Shell Programming and Scripting

Employee records

If there are 2 records for an Employee, How can I choose the one with eff_status = ‘Active' and ignore the eff_status ='Terminated'. if there is only one record, then just write that record regardless of the eff_status. Please assist. (1 Reply)
Discussion started by: Harimalyala
1 Replies
ECHO(3) 								 1								   ECHO(3)

echo - Output one or more strings

SYNOPSIS
void echo (string $arg1, [string $...]) DESCRIPTION
Outputs all parameters. echo is not actually a function (it is a language construct), so you are not required to use parentheses with it. echo (unlike some other language constructs) does not behave like a function, so it cannot always be used in the context of a function. Additionally, if you want to pass more than one parameter to echo, the parameters must not be enclosed within parentheses. echo also has a shortcut syntax, where you can immediately follow the opening tag with an equals sign. Prior to PHP 5.4.0, this short syn- tax only works with the short_open_tag configuration setting enabled. I have <?=$foo?> foo. PARAMETERS
o $arg1 - The parameter to output. o $... - RETURN VALUES
No value is returned. EXAMPLES
Example #1 echo examples <?php echo "Hello World"; echo "This spans multiple lines. The newlines will be output as well"; echo "This spans multiple lines. The newlines will be output as well."; echo "Escaping characters is done "Like this"."; // You can use variables inside of an echo statement $foo = "foobar"; $bar = "barbaz"; echo "foo is $foo"; // foo is foobar // You can also use arrays $baz = array("value" => "foo"); echo "this is {$baz['value']} !"; // this is foo ! // Using single quotes will print the variable name, not the value echo 'foo is $foo'; // foo is $foo // If you are not using any other characters, you can just echo variables echo $foo; // foobar echo $foo,$bar; // foobarbarbaz // Some people prefer passing multiple parameters to echo over concatenation. echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10); echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . " "; echo <<<END This uses the "here document" syntax to output multiple lines with $variable interpolation. Note that the here document terminator must appear on a line with just a semicolon. no extra whitespace! END; // Because echo does not behave like a function, the following code is invalid. ($some_var) ? echo 'true' : echo 'false'; // However, the following examples will work: ($some_var) ? print 'true' : print 'false'; // print is also a construct, but // it behaves like a function, so // it may be used in this context. echo $some_var ? 'true': 'false'; // changing the statement around ?> NOTES
Note Because this is a language construct and not a function, it cannot be called using variable functions. SEE ALSO
print(3), printf(3), flush(3), Heredoc syntax. PHP Documentation Group ECHO(3)
All times are GMT -4. The time now is 01:33 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy