Shell Script и результаты SQL - PullRequest
       3

Shell Script и результаты SQL

5 голосов
/ 17 августа 2011

В настоящее время я хочу извлечь значение из команды SQL, отвечаю

что-то вроде этого:

psql db -c "SELECT COUNT(test) FROM tbTest;"

результат:

 count
------
 33176
(1 row)

Я хочу извлечь значение 33176 ... Есть ли простой способ сделать это?

Ответы [ 5 ]

20 голосов
/ 18 сентября 2011

Зачем гадить с ненужными вещами?Просто используйте некоторые psql опции ...

> psql -At -c "SELECT COUNT(test) FROM tbTest;" db
115899
4 голосов
/ 21 сентября 2011

Заключив полную команду оболочки в backticks, вы можете получить ее результат в переменную оболочки:

#/bin/sh

THECOUNT=`psql -A -t -c 'SELECT COUNT(*) FROM tbTest;' db`
echo "the count = $THECOUNT"
2 голосов
/ 17 августа 2011

Если он всегда возвращается в этом формате (ожидаемый результат в строке 3), вы можете использовать это:

psql db -c "SELECT COUNT(test) FROM tbTest;" | tail -n 2 | head -n 1

Объяснение:

tail -n 2 получит последние 2 строки, а затем обработается как head -n 1, что означает получение первой 1 строки.

1 голос
/ 17 августа 2011

Если вы можете согласиться запустить процесс, но не два (голова и хвост), вы можете:

psql db -c "SELECT COUNT(test) FROM tbTest;" | sed -n -e '3p'

Это всегда предполагает, что вывод psql будет состоять из 4 строк, а вам нужна третья.

1 голос
/ 17 августа 2011

Редактировать : на самом деле, это не работает, извините.Но ниже работает.

Если результат всегда 4 строки и без вызова каких-либо других команд, которые создают процесс:

(read; read; read count; read ) < <(psql db -c "SELECT COUNT(test) FROM tbTest;")
echo "$count"

Это также работает:

Конец редактирования

psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count; read; echo "$count")

Предупреждение: переменная count не будет доступна из скобок, поскольку канал (|) запускает новый процесс.Так что это не работает:

psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count; read)
echo "$count"

Редактировать:

Если вы хотите считать в переменной, вы можете:

count=$(psql db -c "SELECT COUNT(test) FROM tbTest;" | (read; read; read count_tmp; read; echo "$count_tmp"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...