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
# 8  
Old 10-26-2015
Quote:
Originally Posted by sam@sam
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:
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
The output differs because awk, always, rounds up the precision floating point. If that's not satisfactory, perhaps, one of the following more involved snippets might do what you want.

Code:
awk '
BEGIN{
    max = 0
    Gib = (1024*1024*1024)
}
function fformat(s){
    match(s, /^[0-9]+\.[0-9]/)
    return substr(s, RSTART, RLENGTH)
}
(val=fformat((($3+0)-($4+0))/Gib)) && val > 1.3{
    if(val > max){
        display = sprintf("%s %s %s %s %s %s %s %s %s %s", $1,$2,$3,$4,val,$5,$6,$7,$8,$9)
        max = val
    }
}
END{
    print display
}' sam.file

or:

Code:
awk '
BEGIN{
    max = 0
    Gib = (1024*1024*1024)
}
function fformat(s){
    match(s, /^[0-9]+\.[0-9]/)
    return substr(s, RSTART, RLENGTH)
}
(val=fformat((($3+0)-($4+0))/Gib)) && val > max{
        display = sprintf("%s %s %s %s %s %s %s %s %s %s", $1,$2,$3,$4,val,$5,$6,$7,$8,$9)
        max = val
}
END{
    print display
}' sam.file


Last edited by Aia; 10-26-2015 at 02:01 AM..
# 9  
Old 10-26-2015
Hello Aia, As per my requirement I gave input parametre(limit) as 1.3, & output generated is shown in below code & from that output .........it should print only one line which contains the max value(i.e highest value) in col5, to achieve this, Its better to sort only that particular filed(clo5) in desc order and use head -1n.......I think this may work, how would you suggest

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.51686 333 349 23 60
2015-01-19 00:13:52 4236378112 2571921240  1.55015 332 349 11 60
2015-01-19 00:14:25 4233428992 2454180800  1.65705 332 349 11 60
2015-01-19 00:15:25 4242997248 2594027248  1.53572 332 349 14 60
2015-01-19 00:16:25 4239589376 2572173856  1.5529 332 349 29 60

# 10  
Old 10-26-2015
Try
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 | "sort -k5,5nr | head -1"}' file
2015-01-19 00:14:25 4233428992 2454180800 1.7 332 349 11 60 3076

(BTW, are you sure the output given in post#9 comes from the awk script in there?)
This User Gave Thanks to RudiC For This Post:
# 11  
Old 10-26-2015
Hello Rudi, you are right and the code works fine...
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 | "sort -k5,5nr | head -1"}' file
2015-01-19 00:14:25 4233428992 2454180800 1.7 332 349 11 60 3076


Code:
in the code I gave limit for val as 1.3 and value greater than 1.3 will be printed ..Now suppose say values in file are less than 1.3 It means that no output will be generated, but here I need output to be printed as something like below:
ok ok ok ok ok ok ok ok ok ok

Code:
to do this first I should store output of awk in a variable, then
check if variable is empty or not,
If variable is empty then it should print output as 
ok ok ok ok ok ok ok ok ok ok
else printf "%b\n" "${variable}"
output will be like 
2015-01-19 00:14:25 4233428992 2454180800 1.7 332 349 11 60 3076

Code:
if [ -n "$var" ]; then     echo "$var"; else     echo "ok ok ok ok ok ok ok ok ok ok"; fi


Last edited by sam@sam; 10-26-2015 at 07:06 PM..
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