2011-08-17 147 views
5

我現在想從一個SQL命令responde提取值Shell腳本和SQL結果

服用點是這樣的:

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

結果是:

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

我想提取33176的價值......有沒有簡單的方法來做到這一點?

回答

2

如果它總是在格式返回(預期結果第3行),您可以使用此:

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

的解釋:

tail -n 2將得到最後2行,然後通過head -n 1處理,即獲得前1行。

+0

外觀極好答案:d – Killercode

+4

AH提供了更優雅的方案。 –

1

編輯:實際上,這不起作用,對不起。但波紋管工作。

如果結果爲總是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")) 
1

如果你能接受啓動一個進程,但不兩個(頭和尾),你可以:

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

這總是假設輸出的psql將4行,你需要第三個。

17

爲什麼使用不需要的東西?只需使用一些psql選項...

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

簡化爲:psql db -Atc'SELECT count(test)FROM tbtest' –

+1

+1。如果你想選擇多個列,這是特別有用的,因爲它刪除了空格。 – ojrac

3

通過封閉在反引號完整的shell命令,可以檢索其結果到一個shell變量:

#/bin/sh 

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