Sponsored Content
Top Forums Shell Programming and Scripting Bash script to print the smallest floating point number in a row that is not 0 Post 303025468 by LMHmedchem on Friday 2nd of November 2018 08:58:18 PM
Old 11-02-2018
Quote:
Originally Posted by Don Cragun
I'm sorry to hear about your accident. Take the time you need to recover; we'll be ready to help when you get back to us.
Thanks, this board is always a great help.

For data like,
Code:
index	name	col_1	col_2	col_3	col_4	col_5
1	name_1	6.55903	0	0	0	3.44097
2	name_2	6.73342	0	4.45826	0	5.80832
3	name_3	6.7876	0	9.04868	0	8.16372
4	name_4	7.07704	0	2.06362	-0.6363	0.6673
5	name_5	0	13.15	0	10.4517	3.39833

This version seems to work,
Code:
#! /bin/sh

# assumes that the input file has a header row
# assumes that the first column is the index and the second column is a name
# assumes that all columns after the first two contain data

# input file name
input_file=$1
# output file name
output_file=$2

awk ' NR>1 { split($0, line_array, "\t");
             id=line_array[1];
             name=line_array[2];
             delete line_array[1];
             delete line_array[2];
             asort(line_array);
             for(x in line_array) {
                if(line_array[x] != 0) { print id "\t" name "\t" line_array[x];  break; }
             }
             delete line_array;
           }' $input_file > $output_file

giving the output,
Code:
1	name_1	3.44097
2	name_2	4.45826
3	name_3	6.7876
4	name_4	-0.6363
5	name_5	3.39833

In short, it parses each row into an array with split(), assigns the first two positions to the id and name variables, and then deletes the first two positions. The array is then sorted with asort(). Finally the array is checked and the first element that is not 0 is printed along with the name and index. I believe that this gives me the smallest non-zero number.

I don't know the type that is used for the array, so I don't know if the above will work if 0 in the input file is actually 0.0, or 0.0000, etc. It is not really possible for input rows to be all 0, but I guess that should be trapped. I didn't think that awk had asort(). I think the cygwin actually calls gawk for awk commands but I'm not sure.

Will this work as I have it now?

LMHmedchem

Last edited by LMHmedchem; 11-02-2018 at 10:29 PM..
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

BASH: floating point exception

Hi, guys, today, I have copied a simple script which runs correctly on a computer to another one. But, the latter informs me: Floating point exception! @ ./command_module a b c where command_module is the module compiled by myself. So, I have fixed it by following steps: 1.... (5 Replies)
Discussion started by: mapleleaves
5 Replies

2. Shell Programming and Scripting

using bc with floating point number in files

Hi, I' using bash and I would like to use "bc" to compute the ratio of of two numbers and assign the ratio to a variable. The numbers are in a file, e.g. 196.304492 615.348986 Any idea how to do it? N.B. I cannot change the file to have 196.304492 / 615.348986 as the file is produced by... (14 Replies)
Discussion started by: f_o_555
14 Replies

3. Shell Programming and Scripting

floating point not recognized by printf in bash

Dear all, I have the following question. Let's say that I have the following script #!/bin/bash value=0.4987865 a=` printf "%6.2f" $value ` b=`echo $value + $value | bc -l` echo $a echo $b exit And the exit is: 0,00 .9975730 Thus, the problem is that the printf order does not... (2 Replies)
Discussion started by: josegr
2 Replies

4. Shell Programming and Scripting

floating point number problem

Hello folks I Hope everyone is fine. I am calculating number of bytes calculation from apache web log. awk '{ sum += $10 } END { print sum }' /var/httpd/log/mydomain.log 7.45557e+09 it show above number, what should i do it sow number like 7455, i mean if after decimal point above 5 it... (5 Replies)
Discussion started by: learnbash
5 Replies

5. Shell Programming and Scripting

problem with floating point number loops

Hey, I guess I am just to stupid and am not seeing the "wood for the trees", but I am always getting strange errors. I want to create a mesh with coordinates like: x y z 3.1 3.0 0.75 0 0 1 3.1 2.9 0.75 0 0 1 3.1 2.8 0.75 0 0 1 3.1 2.7 0.75 0 0 1 3.0 ... (10 Replies)
Discussion started by: ergy1983
10 Replies

6. Shell Programming and Scripting

[BASH] Regex for floating point number

Hey again, I have a basic regex that tests if a number is a float. Thank you. (5 Replies)
Discussion started by: whyte_rhyno
5 Replies

7. Shell Programming and Scripting

Bash Floating point math with bc

Hello Everyone, I am currently working on a script to calculate optimal tcp window size the formula that I am following is 2 x (bandwith speed /8 * Round Trip Time ) = x This is what I have so far #!/bin/bash echo "Enter connection speed" << Get the speed of the Connection from... (3 Replies)
Discussion started by: bmfmancini
3 Replies

8. Shell Programming and Scripting

[BASH] Floating point exception

Heyas I have a script (vhs - video handler script, using ffmpeg) to encode videos. It also encodes a dvd, but until now just non-copy-protected ones, so i've tried to add/implement a vobcopy wrapper to be used by my script. At first it looked quite fine, but when changing from the first VOB... (9 Replies)
Discussion started by: sea
9 Replies

9. Shell Programming and Scripting

Convert floating point to a number

Hello Guys, I have a floating point number 1.14475E+15 I want to convert this number in to full number (Integer or Big integer). I tried couple of functions it did not work. When I use INT=${FLOAT/.*} I am getting value as 1. I don't want a truncated value #!/bin/bash #... (9 Replies)
Discussion started by: skatpally
9 Replies

10. Shell Programming and Scripting

Comparison of floating point numbers in bash

I have the following code snippet in bash if ]; then minm=`echo "$diff" | bc` fi It works well for most of the cases. However lets say diff is -0.17 and minm is -0.0017. In such a case the comparison seems to fail. Is the correct way to compare a mixture of positive and... (12 Replies)
Discussion started by: ngabrani
12 Replies
All times are GMT -4. The time now is 01:17 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy