Ответ 1
В bash правильно работает:
a=$(echo '111 222 33' | awk '{print $3;}' )
echo $a # result is "33"
Другой вариант - преобразовать строку в массив:
a="111 222 333"
b=($a)
echo ${b[2]} # returns 333
Это должно быть довольно прямолинейно, и я не знаю, почему я борюсь с ним.
Я запускаю следующую команду psql из оболочки script, чтобы выяснить, были ли все индексы удалены перед вставкой данных.
INDEXCOUNT=$(psql -p $dbPort -U enterprisedb -d main_db -c "select Count(*) from all_indexes where index_schema = 'enterprisedb';")
В этот момент INDEXCOUNT равен "COUNT ------- 0"
Теперь, если я повторяю следующую строку, я получаю результат, который я хочу -
echo $INDEXCOUNT | awk '{print $3}'
Как назначить значение $INDEXCOUNT | awk ‘{print $3}’
переменной, чтобы проверить ее в выражении "IF"?
Например:
RETURNCOUNT=$INDEXCOUNT | awk '{print $3}'
В bash правильно работает:
a=$(echo '111 222 33' | awk '{print $3;}' )
echo $a # result is "33"
Другой вариант - преобразовать строку в массив:
a="111 222 333"
b=($a)
echo ${b[2]} # returns 333
Или вы можете напрямую использовать:
${INDEXCOUNT##* }
Это может быть проще использовать для тестирования с помощью инструкции if/
INDEXCOUNT="111 222 333"
echo $INDEXCOUNT | awk '{if ($3 == 333) print $3}';
Вы можете попробовать следующее:
RETURNCOUNT=`echo $INDEXCOUNT | awk '{print $3}'`
Идея состоит в том, чтобы включить любую команду оболочки между backticks, чтобы получить результат в переменную.