(standard_in) 1: parse error

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..