Subtract coloumn3 with coloumn 4 & divide it


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Subtract coloumn3 with coloumn 4 & divide it
# 1  
Old 10-25-2015
Subtract coloumn3 with coloumn 4 & divide it

I have a file called testfile as per my requirement I want to subtract coloumn3 with coloumn 4 & divide it with (1024*1024*1024)) and finally if the value is greater than 1.5 then it should be printed
formula looks like this (($3-$4)/(1024*1024*1024))

Code:
more testfile
2015-01-19 00:12:32 4227465216 2598752128 333 349 23 60 56811040
2015-01-19 00:13:52 4236378112 2571921240 332 349 11 60 140968528
2015-01-19 00:14:25 4233428992 2454180800 332 349 11 60 3076
2015-01-19 00:15:25 4242997248 2594027248 332 349 14 60 1060
2015-01-19 00:16:25 4239589376 2572173856 332 349 29 60 0

Code:
final output looks like this:
2015-01-19 00:12:32 1.5 333 349 23 60 56811040
2015-01-19 00:13:52 1.5 332 349 11 60 140968528
2015-01-19 00:15:25 1.5 332 349 14 60 1060
2015-01-19 00:16:25 1.5 332 349 29 60 0

---------- Post updated at 08:17 AM ---------- Previous update was at 06:50 AM ----------

this is new code , but not getting expected results
Code:
cat filename | awk '{val=($3-$4)/(1024*1024*1024) val> 1.4 {print $1,"\t" $2,"\t" $3,"\t" $4,"\t" val,"\t"$5,"\t""\t"$6,"\t""\t"$7,"\t""\t" "\t" $8,"\t" $9,"\t";}


Last edited by sam@sam; 10-25-2015 at 08:11 PM..
# 2  
Old 10-25-2015
Code:
awk '
(($3+0)-($4+0))/(1024*1024*1024) > 1.5 {
    printf "%s %.1f %s\n", $1OFS$2,(($3+0)-($4+0))/(1024*1024*1024), $5OFS$6OFS$7OFS$8OFS$9
}' OFS='\t'  testfile

# 3  
Old 10-25-2015
Thanks Aia, I got output from below code:
Code:
cat sam | awk '{val=($3-$4)/(1024*1024*1024)} val > 1.3 {print $1,$2,$3,$4,val,$5,$6,$7,$8,$9;} '

but in the output column 5 should be printed as below, how to achieve this
1.5
1.5
1.6
1.5
1.5

Code:
output produced
2015-01-19 00:12:32 4227465216 2598752128 1.51686 333 349 23 60 56811040
2015-01-19 00:13:52 4236378112 2571921240 1.55015 332 349 11 60 140968528
2015-01-19 00:14:25 4233428992 2454180800 1.65705 332 349 11 60 3076
2015-01-19 00:15:25 4242997248 2594027248 1.53572 332 349 14 60 1060
2015-01-19 00:16:25 4239589376 2572173856 1.5529 332 349 29 60 0

# 4  
Old 10-25-2015
substitute the `print' for `printf "%s %s %s %s %.1f %s %s %s %s %s\n", '
You may be able to combine some of those `%s' into one as I did in post #2
By the way, cat sam | is not necessary, since awk can read the file sam on its own, saving some cpu cycles.
Code:
awk '{val=(($3+0)-($4+0))/(1024*1024*1024)} val > 1.3 {printf "%s %s %s %s %.1f %s %s %s %s %s\n", $1,$2,$3,$4,val,$5,$6,$7,$8,$9;}' sam

This User Gave Thanks to Aia For This Post:
# 5  
Old 10-25-2015
Code:
 val> 1.4

You should change this to
Code:
val => 1.50

No where in your division do you truncate or round the quotient to 1 decimal place.
# 6  
Old 10-25-2015
Hello Aia, I have produced 2 outputs, and compared with column 5, I see some differences,
in 2nd line for output2 its showing 1.6 but i think it should be 1.5 and vice versa for next lines . can u pkease clarify me

Code:
OUTPUT1
awk '{val=($3-$4)/(1024*1024*1024)} val > 1.3 {print $1,$2,$3,$4,val,$5,$6,$7,$8,$9;} ' file       
2015-01-19 00:12:32 4227465216 2598752128 1.51686 1.51686 333 349 23 60
2015-01-19 00:13:52 4236378112 2571921240 1.55015 1.55015 332 349 11 60
2015-01-19 00:14:25 4233428992 2454180800 1.65705 1.65705 332 349 11 60
2015-01-19 00:15:25 4242997248 2594027248 1.53572 1.53572 332 349 14 60
2015-01-19 00:16:25 4239589376 2572173856 1.5529 1.5529 332 349 29 60

Code:
OUTPUT2
awk '{val=(($3+0)-($4+0))/(1024*1024*1024)} val > 1.3 {printf "%s %s %s %s %.1f %s %s %s %s %s\n", $1,$2,$3,$4,val,$5,$6,$7,$8,$9;}' file
2015-01-19 00:12:32 4227465216 2598752128 1.5 1.51686 333 349 23 60
2015-01-19 00:13:52 4236378112 2571921240 1.6 1.55015 332 349 11 60
2015-01-19 00:14:25 4233428992 2454180800 1.7 1.65705 332 349 11 60
2015-01-19 00:15:25 4242997248 2594027248 1.5 1.53572 332 349 14 60
2015-01-19 00:16:25 4239589376 2572173856 1.6 1.5529 332 349 29 60

Also I want to print only one max value as output(I mean print the line which has highest value in column 5), not all the values greater than 1.3 it SHOULD CHECK for values greater than 1.3 and out of those print the the max one

Last edited by sam@sam; 10-25-2015 at 11:27 PM..
# 7  
Old 10-26-2015
Quote:
Originally Posted by jgt
Code:
 val> 1.4

You should change this to
Code:
val => 1.50

No where in your division do you truncate or round the quotient to 1 decimal place.
You are correct in noting that using val > 1.4 as a synonym for val >= 1.5 is wrong. But, there are a few issues here.
  1. The awk greater than or equal comparison operator is >=; not =>.
  2. When printing numbers with print or printf with the format specifier %.1f, the printing function will round the value being printed up or down to the closest number representable in that format to the value being printed. (So, the values 1.47 and 1.5491 would print as 1.5.)
  3. The >= comparison operator compares values without regard to how that value might be rounded by various print format specifiers. (So, the comparison 1.47 >= 1.5 evaluates to false even though both values would print as 1.5 if printed using printf("%.1f\n", value).)
  4. The double precision floating point value 1.5 happens to have an exact representation as an IEEE floating point value. The decimal values 1.3, 1.6, and 1.7, however, are not exactly representable in that format.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Merge the three csv files as one according to first coloumn.

I have three files with similar pattern i need to merge all the coloumns side by side from all three files according to the first coloumn example as shown below I mentioned 5 coloumns only in example but i have around 15 coloumns in each file. file1: Name,Samples,Error,95RT,90RT... (4 Replies)
Discussion started by: Raghuram717
4 Replies

2. Shell Programming and Scripting

Transpose the 2nd coloumn in every fourth row three times....

I have several csv files, each hundreds of rows with the following layout "","SEQ ID No. 1 Subject # 20" "BPM neg.:",68.83 "BPM normal:",68.48 "SEQ ID No. 1 Subject # 20",79.33 "","SEQ ID No. 10 Subject # 20" "BPM neg.:",68.05 "BPM normal:",68.58 "SEQ ID No. 10 Subject # 20",81.63... (6 Replies)
Discussion started by: bertbrutzel
6 Replies

3. UNIX for Beginners Questions & Answers

Replace in the specific coloumn of a csv

I have a CSV with 6 coloumn. I need to replace a ',' with '|' in the 4th coloumn of a CSV only so i can upload in Database. When i Upload now, commas used in the text in the 4th coloumn are treated as delimiter and remaining text goes to the next coloumn. Any solutions to replace, thanks. (1 Reply)
Discussion started by: adnan11
1 Replies

4. UNIX for Dummies Questions & Answers

Combining two files with a reference coloumn

Hi all, this is file1.txt 10.210.226.21 alarmSupervisionActive=true 10.64.136.209 alarmSupervisionActive=true 10.64.174.209 alarmSupervisionActive=true 10.64.182.65 alarmSupervisionActive=true 10.66.193.113 alarmSupervisionActive=true 10.80.124.67 alarmSupervisionActive=true ... (6 Replies)
Discussion started by: sau_boy
6 Replies

5. Shell Programming and Scripting

Compare & subtract lines in files by column using awk.

I have two files with similar column pattern as given below : 2 sample lines from file1 are given below. 18 12630 . G T 49.97 . AC=2;AF=1.00;AN=2;DP=3;Dels=0.00;FS=0.000;HRun=0;HaplotypeScore=0.0000;MQ=60.00;MQ0=0;NDA=1;QD=16.66;SB=-0.01 GT:AD:DP:GQ:PL ... (2 Replies)
Discussion started by: vaibhavvsk
2 Replies

6. UNIX for Dummies Questions & Answers

transponse row to coloumn output

dears i have row data as below: ======================================================================================== Session Count: 24580 Session Count: 13426 Session Count: 22533 Session Count: 0 Session Count: 0 Session Count: 15036 Session Count: 11625 Session Count: 6942... (3 Replies)
Discussion started by: thehero
3 Replies

7. UNIX for Dummies Questions & Answers

passing coloumn value to system function in awk

Hi all, I have a file which contain data like 1|2009-12-12 2|2010-02-28 3|2009-02-29 i have to validate that second coloumn have proper date i tried like awk -F "|" ' !system("touch -d $2 file1 2> /dev/null" ) ' but its not printing any thing but when i try using hard... (2 Replies)
Discussion started by: max_hammer
2 Replies

8. UNIX for Dummies Questions & Answers

How to copy one coloumn from one file to another

Hi All, I have two files in which i want to copy one coloumn from one file to another such that it appears as a separate coloumn in the other file.Please note there already exists a coloumn in the other file.For eg in file 1(first file) i have 12 23 35 in file 2(other file) i have 34 45... (2 Replies)
Discussion started by: navjotsingh
2 Replies

9. Shell Programming and Scripting

How To display second coloumn values

i have a file like this ..... empno ----- ename ----- job 1 ----- scott----- manager 2----- ford----- salesman 3 ----- mark---- president in this i wanna display second column means ename... (6 Replies)
Discussion started by: naughty21
6 Replies

10. UNIX for Dummies Questions & Answers

Subtract date & time in diferent rows

Hi Friends :) I have a long file having fields in the form : Field1 yy/mm/dd hh:mm:ss Duration(Sec) line 1) 123123 05/11/30 12:12:56 145 line 2) 145235 05/11/30 12:15:15 30 line 3) 145264 05/11/30 13:14:56 178 . . I want to subtract yy/dd/dd hh:mm:ss in line (2) from yy/mm/dd hh:mm:ss in... (1 Reply)
Discussion started by: vanand420
1 Replies
Login or Register to Ask a Question