Hi,
I am trying to make a script that tries to compare two values and print if one is greater than another. It seems to return a (standard_in) 1: parse error at times.
#!/bin/sh
a= awk '{print $1}' file1.txt
b= awk '{print $1}' file2.txt
c= awk '{print $1}' file3.txt
x= awk '{print $1}' file4.txt
y= awk '{print $1}' file5.txt
z= awk '{print $1}' file6.txt
if [ "$x" == "" ]
then
x=1000
elif [ "$y" == "" ]
then
y=1000
elif [ "$z" == "" ]
then
z=1000
fi
echo "$a>$x" | bc
echo "$b>$y" | bc
echo "$c>$z" | bc
Files 1-6 have numbers in them and if some value in x y z are missing I want to replace it by a large number so that x y or z is always greater than a b or c.
Can someone find out whats wrong here.
What is the structures of these input files? Is there only one number in them? If so, is there a reason you are using files for input?
To put the output of a variable into variable:
var=$(cmd)
no space is allowed around the equal sign
The equation uses a single =
You can also use variable expansion to make sure a variable becomes 1000 when empty:
echo "$a>${x:=1000}"
Hi,
Thanks for the response. The reason that I use files it because it has been generated earlier.
I made the suggested changes, still seem to be getting the same error. It happens whenever the line is empty. Below is the script
#!/bin/sh
for name in */
do
echo $name
a=$(cat $name/num1/New\ folder/processing_new/final.txt | grep "The url for " |awk '{if (NR==2) {print}}' | awk '{print $1}')
b=$(cat $name/num1/New\ folder/processing_new/final.txt | grep "The url for " |awk '{if (NR==3) {print}}' | awk '{print $1}')
c=$(cat $name/num1/New\ folder/processing_new/final.txt | grep "The url for " |awk '{if (NR==4) {print}}' | awk '{print $1}')
x=$(cat $name/num1/New\ folder/processing_new/final.txt | grep "download info" | grep '21$'| awk '{print $1}')
y=$(cat $name/num1/New\ folder/processing_new/final.txt | grep "download info" | grep '40$'| awk '{print $1}')
z=$(cat $name/num1/New\ folder/processing_new/final.txt | grep "download info" | grep '59$'| awk '{print $1}')
if [ "$x"="" ]
then
x=1000
elif [ "$y"="" ]
then
y=1000
elif [ "$z"="" ]
then
z=1000
fi
echo "$a>$x" | bc
echo "$b>$y" | bc
echo "$c>$z" | bc
done
In assignment there should not be a space around the equal sign. but in comparisons there should be :
if [ "$x" = "" ]
The way the values are extracted from the files into the variables is highly inefficient and this will produce a slow script. What do these files look like and how many are there?
The file is usually a few thousand lines long but I will be dealing with only 15 or so files at a time. A sample line is below.
11.1 Sat Feb 15 2014 06:05:00 PM.026 [DEBUG] [org.osmf.net.httpstreaming.f4f.HTTPStreamF4FIndexHandler] The url for ( time=0, quality=0) = [HTTPStreamRequest kind=download, url=http://ip.add.re.ss/vod/final_0.25Seg1-Frag1]
Out of the lines which match with the grep I know the line at which the interesting ones are, so I just print them out and just get the first column which is a time stamp.
Also with no space around assignment and space around comparison, I still get the same error as before.
Thanks.!
---------- Post updated at 02:48 PM ---------- Previous update was at 02:44 PM ----------
echo "$a>${x:=1000}"
This seems to fix the problem. Could you explain this if it is not asking too much.
Thanks.
Hi,
in the input data, I noticed that both either a b c or x y z could be empty.
So I changed the comparison line to:
echo "${a:=1000}<${x:=1000}" | bc
echo "${b:=1000}<${y:=1000}" | bc
echo "${c:=1000}<${z:=1000}" | bc
Was hoping that this would do the trick, but when given an input
22.2
40.8
59.2
36.5
53.7
it returns me
1
0
1
While it should have been
1
0
0
.
I am not sure if I understand things right here. Could you please help.
Edit: Fixed the problem, was a mistake with variable names that I was using...Sorry..