awk script to check and throw error for multiplication result


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk script to check and throw error for multiplication result
# 1  
Old 05-08-2018
awk script to check and throw error for multiplication result

I need to multiply column1 and column3 data and need to compare it with column5. Need to check multiplication and Throw error if result is greater or less than column5 values, though difference of +/- 2 will be ok

Ex - if column1 has 2.4 and column3 has 3.5, it will be ok if column5 have value in range from row1(6.4 to 10.4), row2(248 to 252), row3(22634.8 to 22638.8) Only need to check multiplication result and Throw error. File has header too, but need to skip header while validating it.

Correct File

Code:
a|b|c|d|e
2.4||3.5||8.4
5||50||250
6.55||3456||22636.8
Correct file

Code:
a|b|c|d|e
2.4||3.5||7.4
5||50||251
6.55||3456||22635.8

Worng file :

Code:
a|b|c|d|e
2.4||3.5||6.3
5|50|247
6.55||3456||22634.4

Worng file

Code:
a|b|c|d|e
2.4||3.5||10.5
5||50||253
6.55||3456||22638.9

Below is code im trying :

This seems to be ok to check result greater than 2
Code:
if ($5 > $1 * $3 + 2 ) {print "Error 401: column1 and colmn3 does not match with column5,Field position 5, Linenumber:"NR,$0}

But below is not working to check if result is less than 2 and throwing error if result of multiplication is equal to $5
Code:
if ($5 < $1 * $3 + 2 ) {print "Error 402: column1 and colmn3 does not match with column5,Field position 5, Linenumber:"NR,$0}

# 2  
Old 05-08-2018
Change the plus to a minus in the Error 402 check condition.
# 3  
Old 05-08-2018
Hi rdtrx1,
Have done, but not working.
please suggest
# 4  
Old 05-08-2018
WHAT and HOW "not working"? The better the info you post, the sooner and better results.

Try to paranthesize the arithmetic expression. Try like
Code:
awk '
                        {L = 0}
$5 > ($1 * $3 + 2)      {L = 1}
$5 < ($1 * $3 - 2)      {L = 2}
L                       {print "Error", L + 400, ": column1 and colmn3 does not match with column5,Field position 5, Linenumber:" NR, $0}
' FS="|" file

# 5  
Old 05-09-2018
Hi Rudic,

By using the below code getting below wrong error code output
As multiplication result of $1*$3 is correct in $5. So i should not supposed to get error.
but still it is showing output as pasted below.
Ideally i should get error message only when multiplication result of $1 andd $3 is not correct and have deviation of more than +/- 2 when compared with $5


Code:
#!/bin/bash
awk -F"|" -v OFS="|" 'NR>1
                        {L = 0}
$5 > ($1 * $3 + 2)      {L = 1}
$5 < ($1 * $3 - 2)      {L = 2}
L                       {print "Error", L + 400, ": column1 and colmn3 does not match with column5,Field position 5, Linenumber:" NR, $0}
' a1.txt > b1.txt

Wrong output

Code:
Error|401|: column1 and colmn3 does not match with column5,Field position 5, Linenumber:1|a|b|c|d|e
2.4||3.5||8.4
5||50||250
6.55||3456||22636.8

# 6  
Old 05-09-2018
It IS absolutely correct, as "a" * "c" + 2 is less than "e".
You might want to exclude the header line?
# 7  
Old 05-10-2018
Hi Rudic,

For the below row, multiplication result of $1 * $3 is equal to $5, so i should not get an error message, but im getting with your code
Error should display only for the bad records rows with header in another file , those have multiplication result deviation of more than +/- 2.
Code:
a|b|c|d|e
2.4||3.5||8.4

Also i am using below code(.awk) to do the same thing with below input file

Code:
BEGIN { FS="|" }
NR>1 { print $0 "\tis " (abs($5-($1*$3)) > 2 ? "bad" : "good") }
function abs(val) { return (val<0 ? -val : val) }

Executing as awk -f tst.awk file

Input

Code:
a|b|c|d|e
2.4||3.5||6.6
5||50||249
6.55||3456||22635.7
2.4||3.5||6.3
5|50|247
6.55||3456||22634.4


could you please help.
So with the above code i want to print only bad records in another file along with header and row number and not the both good and bad records.
Expected output

Code:
a||b||e
2.4||3.5||6.3   is bad, line number 1
5|50|247        is bad, line number 2
6.55||3456||22634.4     is bad, line number 3

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Percentage / Multiplication in Shell Script

Hello, I am trying to compute the percentage in a script as shown below: PerCover=`echo "scale=2 ; 100 \* ($InputCover/$Total)" | bc` However the PerCover value is blank/null. What do I need to do differently? Thanks for your input! ~Guss (1 Reply)
Discussion started by: Gussifinknottle
1 Replies

2. Shell Programming and Scripting

Multiplication of a column from 2 files using awk

Hi, I have two files (file1.txt, file2.txt) in which, I would like to multiply all the values in file1 with the first row value of file2, file1 * second row value of file2, file1 * third row value of file2 and so on. Below are my sample data. file1.txt file2.txt ... (6 Replies)
Discussion started by: ida1215
6 Replies

3. Shell Programming and Scripting

search line with more than two dots if so throw error

Hi, I have a requirement like i have to search a script and find names that conatins more than two dots, if so then throw error. For ex: a1.b1.comname here i have to find comname and check two dots. it will not throw error a1.b1.c1.comname here it contains more than 2dots it will throw... (3 Replies)
Discussion started by: swagat123
3 Replies

4. Shell Programming and Scripting

Error with "multiplication table" in shell script

#!/bin/sh echo Enter the multiplication number required: read number for i in 1 2 3 4 5 6 7 8 9 10 do echo "$number * $i = expr $number \* $i" done I am not getting the output for this multiplication table. (4 Replies)
Discussion started by: vinodpaw
4 Replies

5. Shell Programming and Scripting

Find Command in the script throw error

Hi I have script that is developed to serch for 30 days old Directory & Files and then remove them ... when i run it successfully removes the Directory & files & but it throw errors on the screen .. .. + find . -type f -mtime +30 -exec rm -f {} ; + exit please help me ?? I... (0 Replies)
Discussion started by: Beginner123
0 Replies

6. Shell Programming and Scripting

program for multiplication in shell script

Hi, I wanted to write a schell program that fetches the values from a file and prints the output as its onerall multiplication. for example I have a file named abc. it has values 2, 3, 4 now my program should give me 2*3*4 ie 24. note:this file abc can have any numbers. so experts,... (9 Replies)
Discussion started by: sandeep.krish
9 Replies

7. UNIX for Dummies Questions & Answers

if a file is empty throw an error

I want to count the number of lines in a file and store it in a variable if this count is zero i hv to throw an error ...is this syntax correct , but i am not getting the desired result I am not using -s option here as i am concerned about record count not the size #!/bin/ksh set $count1... (4 Replies)
Discussion started by: mavesum
4 Replies

8. Shell Programming and Scripting

using awk multiplication

Suppose i have a file A 1*2*3*4 2*4*4*22 and second file B 2*3*4*5 4*4*6*7 By multiplying file A by file B that is file A by first column in file B respectively output shud be 2*6*12*20 8*16*24*154 my code is =$1 next } {for (f=1;f<=NF;f++) (2 Replies)
Discussion started by: cdfd123
2 Replies

9. Shell Programming and Scripting

throw a generic message upon error

hi all, in ksh, is there a way to throw a generic error message. i have lots of commands in my script and i didnt want to put if ; then doStuff(); else print "an error occured, please run script again"; fi around all the commands used. is there a way detect a command has... (1 Reply)
Discussion started by: cesarNZ
1 Replies

10. UNIX for Dummies Questions & Answers

multiplication shows syntax error

my shell script is simple arithmetic process.my addtion,substract and divide all can be worked only except multiplication.please help me.the shell is following: #!/usr/bin/sh echo "enter a number1:" read number1 echo "enter an operator:" read operator echo "enter a number2:" read number2... (4 Replies)
Discussion started by: sonicstage
4 Replies
Login or Register to Ask a Question