0

結果を次のように表示するクエリがあります

 app_no
--------
(0 rows)

行の部分だけを取得する必要があり、それも数だけを取得する必要があります。結果を変数に保存していますが、解析できません。

napp=`psql -U postgres appdb -c "select appno from app.apps where properties&2048=1024

cap=$(echo "$napp"|sed -n 's/[0-9][0-9] rows/\1/p')
echo "$cap"

行の数だけが必要で、それも数だけです。

4

2 に答える 2

1

appno一致するエントリの数が必要な場合は、おそらく次を使用する必要があります。

SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 1024

ただし、条件は常に 0 または false になるため、答えは常に 0 になります。両方とも 1024 または両方とも 2048 のいずれかで、同じビットが 2 回必要です。

SELECT COUNT(*) FROM app.apps WHERE properties & 1024 = 1024
SELECT COUNT(*) FROM app.apps WHERE properties & 2048 = 2048

見出しと要約を要求する SQL インターフェイスは、シェル スクリプトを作成するときに厄介です。ただし、psqlマニュアルはそれを示唆して-qおり、-t役立つ可能性があります (-Aおそらくこれも):

  • -Aまた--no-align

    非整列出力モードに切り替えます。(それ以外の場合、デフォルトの出力モードは調整されます。)

  • -qまた--quiet

    psql が静かに作業を行うように指定します。デフォルトでは、ウェルカム メッセージとさまざまな情報出力が出力されます。このオプションを使用すると、これは発生しません。これは、-c オプションで役立ちます。psql 内で QUIET 変数を設定して、同じ効果を達成することもできます。

  • -tまた--tuples-only

    列名や結果の行数のフッターなどの出力をオフにします。これは\tコマンドと同等です。

于 2013-03-14T19:37:31.510 に答える
0

文字列をそのままカットしたい場合:

napp=$(psql -U postgres appdb -c "
    select appno frpm app.apps
    where properties&2048=1024;"
)
cap=$(echo "$napp" | sed -nr 's/.*\(([0-9]+) rows.*/\1/p')
echo "$cap"

しかし、より良い解決策はジョナサン・レフラーのものです

于 2013-03-14T19:28:25.750 に答える