Finding an average


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Finding an average
# 8  
Old 10-09-2013
I m using Mac Pro..... So it gives you information what I am using i guess....
But as long as you recommend the strategy or what i have to add then you do not need to rewrite my code.

Basically, This is my piece of code..I just think that we can add smth for case with rows of numbers in file.
One more thing:
for example we have file1 and file2:
cat file1
-> 13 4 6 7 3
cat file2
-> 3
5
6

so when i run my code:
sh average file1 file2
->10 (WHICH is average of all numbers)
i can have many files with numbers in rows or columns or both. Space between numbers also can be double or triple etc. Hope u help me.
I thought also to add to while loop tr ' \n ' ' , ' and tr ' ' ' , ' Smilie
Code:
#/bin/sh

check(){
    if [ -z "$1" ];
  then echo "No user input";
exit;fi
       }

check $1




sum=0
n=0 
for i in $*
do
echo $i
    if [ -f $i ]
    then
        while read line        
        do
  n=` expr $n + 1 `
           sum=` expr $sum + $line `
                         done < $i

        else
           sum=` expr $sum + $i `
         n=` expr $n + 1 `
           fi


         done

 average=$(echo "scale=3; $sum/$n" | bc -l )
        #  average=` expr $sum / $n `
          echo $average


Last edited by Manu1234567; 10-09-2013 at 10:22 PM..
# 9  
Old 10-10-2013
For your above files,
Code:
echo scale=2";" "(" $(cat file{1..2}|tr -s ' \n' '+') "0)" / $(cat file{1..2}|wc -w) | bc
5.87

will do.
# 10  
Old 10-10-2013
Thank uSmilie One more thing it is more relating to the input from pipes...for example
echo 5 3 | sh my_code. What I need to add to my code for accepting input from pipes? Would appreciate if you tell what I need to add in my piece of code...thanks

Code:
check(){
    if [ -z "$1" ];
  then echo "No user input";
exit;fi
       }

check $1
sum=0
n=0
t=0
for i in $*
do
          if [ -f $i ]
                  then
                  while read line
                        do
                       for j in $line
                                do

                           n=` expr $n + 1 `
                           sum=` expr $sum + $j `
                                        done
                                        done< $i
           else
                    sum=` expr $sum + $i `
                    n=` expr $n + 1 `
           fi

          done


         average=$(echo "scale=2; $sum/$n" | bc -l )
        # average=` expr $sum / $n `
         echo $average

# 11  
Old 10-11-2013
You never did answer my question about what shell you're using and whether or not you had access to a 1993 or later version of the Korn shell. You've said you're using a Mac, so if you're using a recent version of OS X you do have a recent Korn shell. Translating your script to just use ksh built-ins (and adding a little structure to your indentation), the following Korn shell script seems to do what you want without all of the invocations of expr and bc:
Code:
#!/bin/ksh
n=0                                             # initialize number of numbers
sum=0                                           # initialize sum of numbers
if [ $# -gt 0 ]
then    for i in $*                             # Process command line args
        do      if [ -f $i ]
                then    while read line         # read from file named by arg
                        do      for j in $line  # for each number on the line
                                do      ((n++)) # increment count and update sum
                                        ((sum += j))
                                done
                        done < $i
                else    ((sum += i))            # process command line number
                        ((n++))
                fi
        done
else    while read line                         # Process numbers from stdin
        do      for j in $line
                do      ((n++))
                        ((sum += j))
                done
        done
fi
average=$(( (sum + 0.0) / n))                   # calculate average
printf "%.2f\n" $average                        # round to 2 decimal places

Obviously, there should be some verification that arguments that are not filenames on the command line and that data read from files (including standard input) is numeric data, but I'll leave that as an excercise for the reader. If there are no command line operands, this script will read data from standard intput. In this case, it does not care if the standard input is from the user typing at a terminal, redirected from a file, or a pipe.

The logic in this script follows the same logic used in your last script except that it reads from standard input instead of printing a diagnostic message if there are no operands given to your script.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Want to get average value for each hour

I want to get CPU average value only (not required user CPU & memory) with each hours on individual date. The sample output is below | | | User |Memory| User | Date | Time |CPU %|CPU % | % |Mem % | 03/02/2015|00:00:00| 24.56| 20.66| 89.75| 63.48|... (13 Replies)
Discussion started by: Saravanan_0074
13 Replies

2. Shell Programming and Scripting

Finding minimum maximum and average

I am trying to find the minimum maximum and average from one file which has values Received message from https://www.demandmatrix.net/app/dm/xml] in milliseconds. Received message from https://www.demandmatrix.net/app/dm/xml] in milliseconds. Received message from... (5 Replies)
Discussion started by: aroragaurav.84
5 Replies

3. Shell Programming and Scripting

shell script for finding average runtime of other script

so I've made a shell script that downloads 6 files in succession from a given url, then deletes them. Now I want to time the script, and the average time it uses by running it ~100 times. My problem is tho, how do I store the time it takes for each run through of the script? I know time writes to... (3 Replies)
Discussion started by: navlelo
3 Replies

4. Shell Programming and Scripting

Perl- Finding average "frequency" of occurrence of duplicate lines

Hello, I am working with a perl script that tries to find the average "frequency" in which lines are duplicated. So far I've only managed to find the way to count how many times the lines are repeated, the code is as follows: perl -ae' my $filename= $ENV{'i'}; open (FILE, "$filename") or... (10 Replies)
Discussion started by: acsg
10 Replies

5. UNIX for Dummies Questions & Answers

Please Help me in my load average

Hello AlL,.. I want from experts to help me as my load average is increased and i dont know where is the problem !! this is my top result : root@a4s # top top - 11:30:38 up 40 min, 1 user, load average: 3.06, 2.49, 4.66 Mem: 8168788k total, 2889596k used, 5279192k free, 47792k... (3 Replies)
Discussion started by: black-code
3 Replies

6. UNIX for Dummies Questions & Answers

average value

If I have a file like this, could anyone please guide me how to find the average value in each metrix. The file has got about 130,000 metrixs. Grid-ref= 142, 235 178 182 203 240 273 295 289 293 283 262 201 176 167 187 187 246 260 282 299 312 293 276 230 191 169 ... (2 Replies)
Discussion started by: su_in99
2 Replies

7. Shell Programming and Scripting

finding duplicate files by size and finding pattern matching and its count

Hi, I have a challenging task,in which i have to find the duplicate files by its name and size,then i need to take anyone of the file.Then i need to open the file and find for more than one pattern and count of that pattern. Note:These are the samples of two files,but i can have more... (2 Replies)
Discussion started by: jerome Sukumar
2 Replies

8. UNIX for Dummies Questions & Answers

Load Average

Hello all, I have a question about load averages. I've read the man pages for the uptime and w command for two or three different flavors of Unix (Red Hat, Tru64, Solaris). All of them agree that in the output of the 2 aforementioned commands, you are given the load average for the box, but... (3 Replies)
Discussion started by: Heathe_Kyle
3 Replies

9. UNIX Desktop Questions & Answers

How to find no of occurances Finding average time?

Hi, I have MyLog.log file, and it contains "*** response Time 150", I want to develop Unix script like , 1. extract all such occurances in the MyLog.log file and 2. compute the average time taken I am new to Unix, any one can give any idea/sample code for this? Thanks in advance. (1 Reply)
Discussion started by: redlotus72
1 Replies

10. Programming

Finding Average for BST

Helo guys, this is not specifically a C programming problem for the unix platform, but a problem i came across in class: Find the average for a binary search tree: typedef Struct SNode { double value; SNode *leftChild; SNode *rightChild; } as SNode; /* * Solution 1 */ ... (2 Replies)
Discussion started by: heljy
2 Replies
Login or Register to Ask a Question