2011-08-17 9 views
5

Obecnie chcemy wyodrębnić wartość z responde poleceń SQLScript Shell i SQL wyniki

somehting tak:

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

wynik jest:

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

chcę wyodrębnić wartość 33176 ... czy jest jakiś prosty sposób na zrobienie tego?

Odpowiedz

2

Jeśli jest zawsze powrócić w tym formacie (oczekiwany wynik na linii 3), można użyć tego:

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

Wyjaśnienie:

tail -n 2 dostanie ostatnie 2 wiersz, a następnie przetwarzane przez head -n 1, co oznacza, dostać pierwszą 1 linię.

+0

doskonała odpowiedź: D – Killercode

+4

AH zapewnia znacznie więcej eleganckie rozwiązanie. –

1

Edytuj: w rzeczywistości to nie działa, przepraszam. Ale ryk działa.

Jeśli wynik jest zawsze 4 linii i bez wywoływania żadnych innych poleceń, które tworzą proces:

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

To również działa:

edycja End

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

Ostrzeżenie: zmienna count nie będzie dostępna poza nawiasami ponieważ rura (|) uruchamia nowy proces. Więc to nie działa:

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

Edit:

Jeśli chcesz liczyć w zmiennej, można:

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

Jeśli można przyjąć, aby uruchomić proces, ale nie dwa (głowa i ogon), możesz:

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

To zawsze zakłada, że ​​wyjście z psql będzie 4 liniami i potrzebujesz trzeciej.

17

Po co marudzić niechcianymi rzeczami? Wystarczy użyć niektórych psql opcji ...

> psql -At -c "SELECT COUNT(test) FROM tbTest;" db 
115899 
+0

uproszczenie do: psql db -Atc 'SELECT count (test) FROM tbtest' –

+1

+1.Jest to szczególnie przydatne, jeśli chcesz wybrać wiele kolumn, ponieważ usuwa on białe spacje. – ojrac

3

załączając kompletny polecenie powłoki w backticks można odzyskać swój wynik do zmiennej powłoki:

#/bin/sh 

THECOUNT=`psql -A -t -c 'SELECT COUNT(*) FROM tbTest;' db` 
echo "the count = $THECOUNT" 
Powiązane problemy