LinuxQuestions.org
Share your knowledge at the LQ Wiki.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Software
User Name
Password
Linux - Software This forum is for Software issues.
Having a problem installing a new program? Want to know which application is best for the job? Post your question in this forum.

Notices

Reply
 
LinkBack Search this Thread
Old 10-31-2008, 03:01 PM   #1
hockeyman_102
Member
 
Registered: Apr 2006
Location: Washington
Distribution: Suse, CentOS, Ubuntu
Posts: 124

Rep: Reputation: 15
simple bash script problem with division.


Hi all. This is a simple bash script that i've spent way too much time on, I'm tying to get a few stats from a group of files. Basically there is a group of files per day (i.e. today = 20081031-0.txt to 20081031-9.txt) and they vary, but I want to check these logs to see how many times we are hitting a .com, .net, etc.. The "percent" is where I'm having issues... It's not really a big deal, but I figured I'd post it. This will be run on FreeBSD btw, if it matters.
Thanks in advance!

Code:
#!/bin/bash
#   liststats.sh
#   Parse daily logs for .com, .net, .org (to start) and push to stats.csv

year=`date +%Y`
month=`date +%m`
day=`date +%d`
day=30     # I did this because the logs for today aren't done.

if [ -e /usr/local/$year$month$day-0.txt ]; then

    total=`cat /usr/local/$year$month$day-?.txt | wc -l | sed 's/ //g'`

    echo "" > stats.csv
    for i in ".com" ".net" ".org";
    do 			# had to use sed to strip the whitespace in hopes it would work...
        count=`cat /usr/local/$year$month$day-?.txt | grep -i $i | wc -l | sed 's/ //g'`
        #percent=$(($count/$total))    # everything else seems to work, but this!
        let "percent = $count / $total"
        echo "$i,$count,$percent,$total >> stats.csv"
        #echo "$i,$count,$percent" >> stats.csv
    done    
else        
    echo "$year$month$day-0.txt not found in /usr/local/"
fi
The desired result (for example):
.com,200,80.00
.net,85,34.00
.org,20,8.00
 
Old 10-31-2008, 03:08 PM   #2
MarkByers
LQ Newbie
 
Registered: Jul 2008
Posts: 6

Rep: Reputation: 0
percent=$(($count*100/$total))

If you want fraction then use "bc":

percent=`echo $count*100/$total | bc -l`
 
Old 10-31-2008, 03:10 PM   #3
pwc101
Senior Member
 
Registered: Oct 2005
Location: UK
Distribution: Slackware
Posts: 1,846

Rep: Reputation: 128Reputation: 128
bash's internal maths can't do floating point calculations; you're best off using bc, which can to a specified number of digits.

edit: too slow by half!
 
  


Reply

Tags
bash, sed, stats


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
bash simple math (division) question babag Programming 3 04-03-2008 05:24 PM
Simple bash script programming problem ArthurHuang Programming 3 01-28-2008 10:53 AM
Idiotically simple bash script problem. morrolan Programming 7 01-14-2006 05:09 PM
bash and math division problem bennethos Programming 5 10-17-2004 01:51 PM
problem with a simple script bash stockerz Linux - Newbie 1 09-21-2004 11:42 AM


All times are GMT -5. The time now is 12:00 AM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration