Visit Our UNIX and Linux User Community


awk Division By Zero Bypass


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk Division By Zero Bypass
# 1  
Old 08-08-2013
awk Division By Zero Bypass

Hi Friends,

I don't understand why "a" is always being printed as zero, when I execute the following command.

Code:
awk '{if($6||$8||$10||$12==0)a=b=c=d=0;else (a=$5/$6);(b=$7/$8);(c=$9/$10);(d=$11/$12); {print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"a"\t"$7"\t"$8"\t"b"\t"$9"\t"$10"\t"c"\t"$11"\t"$12"\t"d"\t"$13,$14}}' input

# 2  
Old 08-08-2013
Hello,

Please let know the Output you are expecting, including the input.


Thanks,
R. Singh
# 3  
Old 08-08-2013
Quote:
Originally Posted by RavinderSingh13
Hello,

Please let know the Output you are expecting, including the input.


Thanks,
R. Singh
Dear R.Singh,

The input is a 100 column long data.

I am trying to divide column 5 with 6, 7 with 8, 9 with 10 and 11 with 12.

If columns 6,8,10 or 12 has zero, awk is complaining that fatal division by zero was attempted.

So, I thought I will read the 6,8,10 and 12th columns first, and if there is a zero, I would make the division output to be zero.

But, except for the division of column 5 with 6, all others are giving correct output. I don't know why this particular division is printing only zeroes even when column 6 is not zero.
# 4  
Old 08-08-2013
Try this instead:
Code:
awk '
        {
                a = ( $6 == 0 ) ? 0 : $5 / $6
                b = ( $8 == 0 ) ? 0 : $7 / $8
                c = ( $10 == 0 ) ? 0 : $9 / $10
                d = ( $12 == 0 ) ? 0 : $11 / $12
                print $1, $2, $3, $4, $5, $6, a, $7, $8, b, $9, $10, c, $11, $12, d, $13, $14
        }
' OFS= '\t' input

This User Gave Thanks to Yoda For This Post:
# 5  
Old 08-08-2013
Quote:
Originally Posted by Yoda
Try this instead:
Code:
awk '
        {
                a = ( $6 == 0 ) ? 0 : $5 / $6
                b = ( $8 == 0 ) ? 0 : $7 / $8
                c = ( $10 == 0 ) ? 0 : $9 / $10
                d = ( $12 == 0 ) ? 0 : $11 / $12
                print $1, $2, $3, $4, $5, $6, a, $7, $8, b, $9, $10, c, $11, $12, d, $13, $14
        }
' OFS= '\t' input

Thanks Yoda. It worked.
# 6  
Old 08-08-2013
or:
Code:
awk '
    function div (a,b){
      return (b)?a/b:0
    }
    {                 
       print $1, $2, $3, $4, $5, $6, div($5,$6), $7, $8, div($7,$8), $9, $10, div($9,$10), $11, $12, div($11,$12), $13, $14  
    }
' OFS= '\t' input


Last edited by vgersh99; 08-08-2013 at 02:25 PM..
These 2 Users Gave Thanks to vgersh99 For This Post:
# 7  
Old 08-08-2013
Your
Code:
awk '{if($6||$8||$10||$12==0)a=b=c=d=0...

will set a,b,c,d to zero if EITHER $6<>0 or $8<>0 or $10<>0 or $12==0, so I guess this is opposite to what you wanted to do...

Previous Thread | Next Thread
Test Your Knowledge in Computers #558
Difficulty: Medium
The term bug was popularized by Grace Hopper in 1947 while working on a Mark II Computer at a US Navy research lab when a moth was stuck in the computer.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk - continue when encountered division error

Hello, How can I add a logic to awk to tell it to print 0 when encountering a division by zero attempted? Below is the code. Everything in the code works fine except the piece that I want to calculate read/write IO size. I take the kbr / rs and kbw / ws. There are times when the iostat data... (5 Replies)
Discussion started by: tommyd
5 Replies

2. Shell Programming and Scripting

awk fatal:division by zero attempted bypass with a condtion

Hi Friends, My input chr1 100 200 1234E-02 0.01 0.05 10 chr1 100 200 14E-11 0.11 0.50 1 chr1 100 200 134E-22 0.00 0.65 111 My command awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$13}' input | awk '{v=($5/$6); print $0"\t"v}' OFS="\t" | awk '{$8=(log($8)/log(2)); print $0}'... (4 Replies)
Discussion started by: jacobs.smith
4 Replies

3. Shell Programming and Scripting

awk - Division with condition

Hi Friends, I have an input file like this cat input chr1 100 200 1 2 chr1 120 130 na 1 chr1 140 160 1 na chr1 170 180 na na chr1 190 220 0 0 chr1 220 230 nd 1 chr2 330 400 1 nd chr2 410 450 nd nd chr3 500 700 1 1 I want to calculate the division of 4th and 5th columns. But, if... (3 Replies)
Discussion started by: jacobs.smith
3 Replies

4. Shell Programming and Scripting

variables division with awk

hello i try to divide 2 variables in order to get a percentage--that's why i'm not interested in integer division--but nothing seems to work I think awk is suitable for this but i'm not quite sure how to use it.. any ideas? here's what I want to do: percentage = varA/varB thank you (2 Replies)
Discussion started by: vlm
2 Replies

5. Shell Programming and Scripting

awk & division

vmstat|awk '{print $3}'|tail -1 returns 6250511, but what I need is 24416, which is 6250511 divided by 256. Please advise. Thank you so much (2 Replies)
Discussion started by: Daniel Gate
2 Replies

6. Shell Programming and Scripting

Division problem -Awk

input one two three four 0 0 0 10424 0 102 0 15091 1 298 34 11111 0 10 0 1287 scripts awk 'NR>1{print ($1/$2) / ($3/$4)}' awk 'NR>1{ if ($1 ||$3 ||$2|| $4 == 0) print 0; else print (($1/$2)/($3/$4))}' error awk: division by zero input record number 1, file rm source line... (9 Replies)
Discussion started by: quincyjones
9 Replies

7. Shell Programming and Scripting

awk division error - 0

input 0 0 9820373 2069 0 0 11485482 awk '{print ($1/$3) / ($4/$7)}' input error Is there any way to fix this problem ? (25 Replies)
Discussion started by: quincyjones
25 Replies

8. UNIX for Advanced & Expert Users

awk: division by zero

I received error "awk: division by zero" while executing the following statement. SunOS 5.10 Generic_142900-15 sun4us sparc FJSV,GPUZC-M echo 8 | awk 'END {printf ("%d\n",NR/$1 + 0.5);}' file1.lst awk: division by zero Can someone provide solution? Thanks Please use code... (11 Replies)
Discussion started by: kumar77
11 Replies

9. Shell Programming and Scripting

awk Division and modulus

I need to read the file divide 3 column with 2nd and run a modulus of 10 and check whether the remainder is zero or not if not print the entire line. cat filename | awk '{ if ($3 / $2 % 10 != 0) print $0}' Whats wrong with it ? (4 Replies)
Discussion started by: dinjo_jo
4 Replies

10. Shell Programming and Scripting

Division by zero error message in AWK

How can I modify my awk code to get rid of the divion by zero error message? If I run the script without an input file, it should return error message "Input file missing" but not divison by zero. Code: #!/bin/nawk -f BEGIN { if (NR == 0) {print "Input file... (4 Replies)
Discussion started by: Pauline mugisha
4 Replies

Featured Tech Videos