How to calculate what percentage of X value is there in the file? | Unix Linux Forums | Shell Programming and Scripting

 Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

# How to calculate what percentage of X value is there in the file?

## Shell Programming and Scripting

#1
12-17-2012
 aroragaurav.84 Registered User Join Date: Jun 2012 Last Activity: 6 November 2013, 4:34 PM EST Posts: 26 Thanks: 0 Thanked 0 Times in 0 Posts
How to calculate what percentage of X value is there in the file?

Input File:

Code:
```5081
2058
175
8282
2358
7347
6612
3459```

END OF INPUT FILE

I need to know how to calculate minimum,maximum,average of the values in the file and also what percentage is the values over some user defined value for example 1000 and what percentage of value is over 5000.

By using the following command mentioned below i was able to find the minimum ,maximum and average but having problem in calculatung perctangae.

Code:
```awk 'NR==1{min=\$1;max=\$1;sum+=\$1;next}{if (\$1<min) min=\$1;if (\$1>max)
max=\$1;sum+=\$1}END{print "min: "min", max: "max",NR: "NR", avg: "sum/NR}' INPUT FILE```

 Your Summary - Threads Created: 9 - Posts: 17 - Posts Edited by a Moderator: 13

Last edited by Scott; 12-17-2012 at 02:39 PM.. Reason: Code tags!
#2
12-17-2012
 Yoda   Jedi Master Join Date: Jan 2012 Last Activity: 15 April 2014, 6:08 PM EDT Location: Galactic Empire Posts: 3,276 Thanks: 227 Thanked 1,154 Times in 1,091 Posts

Code:
```awk ' BEGIN { max=sum=0; th=fv=0; } NR==1 { min=\$1; } {
val=\$1;
sum+=val;
if(val<min) { min=val; }
if(val>max) { max=val; }
if(val>1000) { th++; }
if(val>5000) { fv++; }
} END {
printf "Min: %d Max: %d Avg: %d 1000 per: %d 5000 per: %d\n", min, max, (sum/NR), (th/NR * 100), (fv/NR * 100);
} ' filename```

#3
12-17-2012
 Chubler_XL   Registered User Join Date: Oct 2010 Last Activity: 2 April 2014, 1:35 PM EDT Posts: 2,601 Thanks: 94 Thanked 804 Times in 757 Posts
Here is a version where you can Set limits for F1 and F2 on the command line:

Code:
```awk -vF1=1000 -vF2=5000 'FNR==1 {min=\$1}
{
sum+=\$1;
if(\$1<min) min=\$1
if(\$1>max) max=\$1
th+=(\$1>F1)
fv+=(\$1>F2)
}
END {
printf "Min: %d Max: %d Avg: %d above %d: %d%% above %d: %d%%\n", min, max, sum/NR, F1, th/NR*100, F2, fv/NR * 100
} ' infile```