Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Doing calculations with bc on one field Post 302586335 by edehont on Sunday 1st of January 2012 01:19:11 AM
Old 01-01-2012
If you want (slash need) to stick to sed and bc, try this:

Code:
sed 's/^\(.*:\)\([0-9]*\),*\([0-9]*\):\([0-9]*\),\([0-9]*\)/print \"\1\2,\3:\4,\5:\",\4\.\5-\2\.\3,\"\n\"/' beurs.txt|bc|sed 's/\(\.\([0-9]*\)\)$/,\2/'

Explanation: Don't abuse a cat! First turn the line into a string by enclosing it in '"'. Add a comma, the expression, a comma and a newline. Feed this to the print function of bc.

Finally translate the last '.' into a ',', because bc is not aware of locale-issues. In the Netherlands we use a decimal ',' instead of a '.'.

When nesting groups in sed, the deeper nested groups get higher numbers. e.g.: (a(b(c))) \1=abc, \2=bc, \3=c. This way we can get rid of the '.'. Of course this applies not only to sed but to other regular expression environments as well.

I've tested this on Ubuntu 11.10.
Quote:
bash --version
GNU bash, versie 4.2.10(1)-release (x86_64-pc-linux-gnu)
sed --version
GNU sed versie 4.2.1
bc --version
bc 1.06.95
Personally I think the above solution is very unreadable. A fairly simple way to achieve your goal with awk could be:
Code:
awk -F: '{printf $0":";gsub(",",".");wm=$3-$2;sub("[.]",",",wm);print wm}' beurs.txt

If this doesn't work in your situation try nawk instead of awk.

Groetjes/Greetings

Eric
This User Gave Thanks to edehont For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Float calculations

As expr is used for integer calculations, which command is used for float calculations. (1 Reply)
Discussion started by: sharmavr
1 Replies

2. UNIX for Dummies Questions & Answers

Time Calculations

I'm trying to have a loop print out statistics every X number of seconds. How can I add a specific number of seconds to a time variable and make a comparison? Thanks ahead of time. For example: startTime = `date +%H%M%S` currentTime = $startTime executeTime = startTime + X # X is equal... (5 Replies)
Discussion started by: Nysif Steve
5 Replies

3. Shell Programming and Scripting

ksh, calculations using bc

hi all, was wondering if there is another way to do calculations in ksh scripts other than using bc ?? i am using a script to calculate average response time and my script errors out after running for a bit. e.g code i am using : averageTime=$(print "$totalTime / $numberOfEntries" |... (2 Replies)
Discussion started by: cesarNZ
2 Replies

4. UNIX for Dummies Questions & Answers

Date Calculations

I need to be able to use the current date and calculate 7 days ago to be stored in another variable to be passed to a file in my Unix shell script. I need the date in the following format: date '+%m/%d/%Y' or 05/16/2006 How do I calculate date minus 7 days or 1 week ago? (8 Replies)
Discussion started by: mitschcg
8 Replies

5. Shell Programming and Scripting

calculations in bash

HI i have following problem, i need to use split command to split files each should be cca 700 lines but i dont know how to inplement it in the scripts becasuse each time the origin file will be various size , any body got any idea cheers (2 Replies)
Discussion started by: kvok
2 Replies

6. UNIX for Dummies Questions & Answers

help with doing calculations on data

Dear All, I have a long list like this: 337 375 364 389 443 578 1001 20100 . . . . etc I would like to substract each value from the first entry which in this case is 337 and report it in a separate column. So the expected output looks like 337 0 (10 Replies)
Discussion started by: pawannoel
10 Replies

7. Shell Programming and Scripting

Problem with calculations

grep Quality abc.txt | awk -F"=" '{print $2}' o/p is given as 70/70 49/70 I want in the below format (percentage format) 100% 70% help me!!!!:confused::confused::confused: ---------- Post updated at 09:59 AM ---------- Previous update was at 09:57 AM ---------- Cell 01 -... (3 Replies)
Discussion started by: nikhil jain
3 Replies

8. Shell Programming and Scripting

Number calculations

I'm writing a script that will read all the fields of a text file into an array(if they are numeric), while at the same time computing the minimum and maximum values from the file. After that I want to output the average of all the numbers in the array. The first problem I'm having is that many... (10 Replies)
Discussion started by: ksmarine1980
10 Replies

9. Shell Programming and Scripting

Output calculations

Attached are the is original output (zipped file) and a custom file using the awk code below in which the average reads per bait are calculated (average.txt) awk '{if(len==0){last=$4;total=$6;len=1;getline}if($4!=last){printf("%s\t%f\n", last,... (7 Replies)
Discussion started by: cmccabe
7 Replies

10. UNIX for Beginners Questions & Answers

Loop doing calculations

Hello. I'm writing an awk script that looks at a .csv file and calculates the weighted grade for each student based on the scores and categories in the file. I am able to get the script to run the only issue however is that the same score for each student is the same. I'm self-teaching myself the... (1 Reply)
Discussion started by: Eric7giants
1 Replies
REGEXP(6)							   Games Manual 							 REGEXP(6)

NAME
regexp - regular expression notation DESCRIPTION
A regular expression specifies a set of strings of characters. A member of this set of strings is said to be matched by the regular expression. In many applications a delimiter character, commonly bounds a regular expression. In the following specification for regular expressions the word `character' means any character (rune) but newline. The syntax for a regular expression e0 is e3: literal | charclass | '.' | '^' | '$' | '(' e0 ')' e2: e3 | e2 REP REP: '*' | '+' | '?' e1: e2 | e1 e2 e0: e1 | e0 '|' e1 A literal is any non-metacharacter, or a metacharacter (one of .*+?[]()|^$), or the delimiter preceded by A charclass is a nonempty string s bracketed [s] (or [^s]); it matches any character in (or not in) s. A negated character class never matches newline. A substring a-b, with a and b in ascending order, stands for the inclusive range of characters between a and b. In s, the metacharacters an initial and the regular expression delimiter must be preceded by a other metacharacters have no special meaning and may appear unescaped. A matches any character. A matches the beginning of a line; matches the end of the line. The REP operators match zero or more (*), one or more (+), zero or one (?), instances respectively of the preceding regular expression e2. A concatenated regular expression, e1e2, matches a match to e1 followed by a match to e2. An alternative regular expression, e0|e1, matches either a match to e0 or a match to e1. A match to any part of a regular expression extends as far as possible without preventing a match to the remainder of the regular expres- sion. SEE ALSO
awk(1), ed(1), sam(1), sed(1), regexp(2) REGEXP(6)
All times are GMT -4. The time now is 05:27 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy