У меня есть следующее заявление AWK в скрипте:AWK не работает в Bash Script
grep -E $city $DATFILE | awk -F "[\t]+" '($3 >= $minbed) && ($4 >= $minsqft) && ($5 <= $maxprice) && ($6 <= $maxweeks)' $DATFILE | sort -nk5 | less
При запуске сценария, выход является пустым. Однако, если я запускаю следующее:
grep -E Toronto listing.dat | awk -F "[\t]+" '($3 >= 2) && ($4 >= 500) && ($5 <= 900000) && ($6 <= 10)' listing.dat | sort -nk4 | less
Он выводится так, как ожидалось.
Я понятия не имею, почему это происходит, и я даже заменил оператор awk в сценарии, чтобы отобразить переменные, чтобы убедиться, что они передают правильно, и они есть.
Вот сценарий до сих пор:
#!/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
Можете ли вы помочь?
Благодаря
'gawk' или' awk'? У вас есть оба примера. – miken32
Ваш скрипт awk находится в одинарных кавычках. Переменные оболочки не расширяются, когда они находятся внутри кодовых слов. Поэтому вам нужно использовать -v, чтобы назначить их переменной awk. –
В любом случае, не отправляйте результаты grep в awk. awk сам может фильтровать по regex – hek2mgl