Visit Our UNIX and Linux User Community


Read Variable From Fille And Convert it to Integer


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Read Variable From Fille And Convert it to Integer
# 1  
Old 06-08-2011
Read Variable From Fille And Convert it to Integer

I read 3 variables from from Inputfile.txt the third one "startnumber" is a number when i compare it with 9 ($startnumber -le 9) it give's me a "unary operator expected", i know that -le is for number comparison. What i need is to convert $startnumber to integer (i have try to do it with expr but no luck)(I'm using Fedora 14). Thanks in advance.
Code:
#!/bin/sh
file="Inputfile.txt"
while IFS=\| read fullname spacename startnumber
do
....
if [ $startnumber -le 9 ];
....


Last edited by Franklin52; 06-09-2011 at 04:29 AM.. Reason: Please use code tags
# 2  
Old 06-08-2011
A number as far as the shell is concerned, a number is a string that holds digits. You don't need to "convert" it, something else is going on.

Could you post a sample of your data file?
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 06-08-2011
Code:
FileName1|File Extension 1|3
FileName2|File Extension 2|100
FileName3|File Extension 3|545


Last edited by Franklin52; 06-09-2011 at 04:29 AM.. Reason: Please use code tags
# 4  
Old 06-08-2011
Works fine.

Keep in mind that any blank line or record will provoke that error. You might want to put an [ -z "$fullname" ] && continue at the top of your loop to ignore blank lines.

Also keep in mind that carriage returns will foul it up. If you edited that file in windows, it will be full of them. tr -d '\r' < infile > fixedfile to get rid of them. Depending on your shell, you could also just change IFS into IFS="|"$'\r' to tell read that carriage returns are whitespace and it shouldn't go bananas on them.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 06-09-2011
Still no luck i get the error
"-le: unary operator expected"
at the if statement
# 6  
Old 06-09-2011
Works for me

Code:
#!/bin/sh

file="inputfile.txt"

while IFS='|' read fullname spacename startnumber
do
echo "$fullname  $spacename  $startnumber"

if [ "$startnumber" -le 9 ];then
  echo "startnumber is less than or equal to 9"
fi
done < $file

exit 0

Output:
Code:
$ test
FileName1  File Extension 1  3
startnumber is less than or equal to 9
FileName2  File Extension 2  100
FileName3  File Extension 3  545

$

Of course you need some error handling and data validating. If you are expecting a number for comparison you should test to be sure its a number first. Also beware of "magic numbers" (the number 9 in the test. What is 9, a count, a range, a code for something else?). Make a variable for 9 at the top with a meaningful name, so if it ever has to change you only have one place to edit, plus the meaningful name makes the code easier to understand and maintain for the guy after you:
Code:
#!/bin/sh
WARNSTARTNUMBER=9    # Print warning if startnumber is <= this value.
file="inputfile.txt"

while IFS='|' read fullname spacename startnumber
do
echo "$fullname  $spacename  $startnumber"

if [ "$startnumber" -le $WARNSTARTNUMBER ];then
  echo "startnumber is less than or equal to $WARNSTARTNUMBER"
fi
done < $file

exit 0


Last edited by gary_w; 06-09-2011 at 12:06 PM..
This User Gave Thanks to gary_w For This Post:
# 7  
Old 06-09-2011
Quote:
Originally Posted by marios
Still no luck i get the error
"-le: unary operator expected"
at the if statement
Could you attach your data file? The actual file, not what you think it looks like. I think it's not what you expect.
This User Gave Thanks to Corona688 For This Post:

Previous Thread | Next Thread
Test Your Knowledge in Computers #343
Difficulty: Medium
Scott McNealy, Andy Bechtolsheim, and Vinod Khosla, all Caltech graduate students, founded Sun Microsystems.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert string number to a integer

I have data as below "ROWS merge process complete. thousand rows changed" I need to get a variable assigned the value of 1000. I mean convert the string thousand to 1000. Any help or pointer. Please use CODE tags as required by forum rules! (6 Replies)
Discussion started by: dsravanam
6 Replies

2. Shell Programming and Scripting

How to read from file and convert from string to integer?

Hi all, I am trying to write a script to be able to Run top command Pick the PIDs that are taking more than 90% of CPU time Get more details like what is the script name and location for that PID Script should run until I manually kill it by ctrl + C I have come up with following script... (3 Replies)
Discussion started by: pat_pramod
3 Replies

3. Shell Programming and Scripting

How to convert string into integer in shell scripting?

Hi All, sessionid_remote=$(echo "select odb_sessionid from sysopendb where odb_dbname='syscdr';" | sudo -u cucluster ssh ucbu-aricent-vm93 "source /opt/cisco/connection/lib/connection.profile; $INFORMIXDIR/bin/dbaccess sysmaster@ciscounity") for sid in $sessionid_remote;do if * ]];... (2 Replies)
Discussion started by: deeptis
2 Replies

4. Shell Programming and Scripting

[Solved] need to convert decimal to integer

Using below command awk 'NR==FNR{A=$1;next} {sum+=($2*A)}END{OFMT="%20f";print int(sum)}' Market.txt Product.txt answer:351770174.00000 how to convert this to 351770174. when i try with below command i am getting different result. awk 'NR==FNR{A=$1;next}... (3 Replies)
Discussion started by: katakamvivek
3 Replies

5. Shell Programming and Scripting

Convert to Integer

Hi fellows!! i'm doing something which is not working out for me properly which i don't understand why nowdate=`date +%s` echo $nowdate now the problem how to convert a date which is stored in a variable mydate="22/Oct/2011" mydate=`date -d '$mydate' +%s` it gives error... (11 Replies)
Discussion started by: me_newbie
11 Replies

6. Programming

read integer from file C

Hi , Can you have a look at my code it should display integer in file but it doesn't #include <stdio.h> /* This function reads two values from a file. */ int demonstrate_fscanf(void) { FILE *InFile; int b, numValuesRead; InFile = fopen("fadata.rtf", "r"); if... (3 Replies)
Discussion started by: guidely
3 Replies

7. Solaris

How to Use a Variable as Integer?

hello, i am writing a script that takes the UID from the PASSWD and then i want to increse the Number by one. for the Next user. i cannot get this to work that a variable is as interger example: set i = 0 set $i = $+1 it's in tcsh if it's mather (10 Replies)
Discussion started by: shatztal
10 Replies

8. Shell Programming and Scripting

how to convert string to an integer and how to do calculations like add.,sub.,mult. on it

How to convert string into an integer or number For example : % set tim = `date` % echo $tim Tue Feb 22 16:25:08 IST 2011 here How to increment time by 10 hrs like 16+10 , here 16 is a string in date cmd. .. how to convert 16 to an integer and added to a another nimber ? Thanks... (3 Replies)
Discussion started by: sbhamidi
3 Replies

9. Programming

How i can read a long integer from standar input and a string with as many characters as specified..

how i can read a long integer from standar input and a string with as many characters as specified in the number? i thing that i must use the read command ofcourse.... (6 Replies)
Discussion started by: aintour
6 Replies

10. UNIX for Dummies Questions & Answers

convert from an integer to a string

i want to convert from an integer to a string..in unix...i am writing a C program with embedded SQL... I remeber using itoa...but for some reason it doesnt work......i cant find it in the manual..... Maybe that is the wrong command..... but i have checked Dev Studio.....and it doest exist in the... (6 Replies)
Discussion started by: mojomonkeyhelper
6 Replies

Featured Tech Videos