I have the following AWK statement in a script:
grep -E $city $DATFILE | awk -F "[\t]+" '($3 >= $minbed) && ($4 >= $minsqft) && ($5 <= $maxprice) && ($6 <= $maxweeks)' $DATFILE | sort -nk5 | less
When I run the script, the output is blank. However, if I run the following:
grep -E Toronto listing.dat | awk -F "[\t]+" '($3 >= 2) && ($4 >= 500) && ($5 <= 900000) && ($6 <= 10)' listing.dat | sort -nk4 | less
It outputs as expected.
I have no idea why this is happening, and I have even replaced the awk statement in the script to echo out the variables to make sure they're passing correctly and they are.
Here is the script thus far:
#!/bin/bash
DATFILE=listing.dat
if [ -f ${DATFILE} ];
then
echo -n "Are you looking into anywhere in the GTA, or a specific city?: "
read uinput
if [ $uinput == "anywhere" ];
then
echo "You have chosen anywhere"
elif [ $uinput == "specific" ];
then
echo -n "Which city?: "
read city
echo -n "Minimum Number of Bedrooms: "
read minbed
echo -n "Minimum Square Footage (500, 600, etc): "
read minsqft
echo -n "Maximum Price: "
read maxprice
echo -n "Maximum Weeks On Market: "
read maxweeks
echo -n "Sort by (price, sqrft, weeks): "
read sortby
if [ $sortby == "price" ];
then
echo -n "Sort by (asc, desc): "
read ascdesc
if [ $ascdesc == "asc" ];
then
grep -E $city $DATFILE | awk -F "[\t]+" '($3 >= $minbed) && ($4 >= $minsqft) && ($5 <= $maxprice) && ($6 <= $maxweeks)' $DATFILE | sort -nk5 | less
elif [ $ascdesc == "desc" ];
then
grep -E $city $DATFILE | awk -F "[\t]+" '($3 >= $minbed) && ($4 >= $minsqft) && ($5 <= $maxprice) && ($6 <= $maxweeks)' $DATFILE | sort -rnk5 | less
fi
fi
fi
else
echo "${DATFILE} Not found!"
fi
Can you please help?
Thanks
If new to any *nix utility, you can see basic docs using 'man utility_name'; from the man page for 'awk' (man awk):
There are other ways to do this, but following the docs your code would be changed to something like:
I'm not able to comment yet due to reputation. Another thing you can do is escape the single quotes around your variable names. If you're still having trouble with all cities showing up, I believe it's because you're supplying awk with the filename. It looks like you need to take that out and let the grep's output be used as input for your awk. I don't have access to my linux box to test it but:
your line (having $DATFILE supplied twice):
option 1: remove the second $DATFILE, escape single quotes
option 2: you may be able to get rid of the grep entirely, with escaped single quotes. awk's IGNORECASE should be a substitute for grep's -E.
Like I said, can't test it for syntax at the moment; I hope it helps ya.
Happy hacking!