在Shell中查询InfluxDB时如何获取输出

时间:2019-04-01 09:59:22

标签: bash shell

我写了一个如下脚本:

#!/bin/bash

c0="show databases"
c1="select count(grade1) from INFO where grade2>60;"
i=0
( while((i++<5))
do
  echo ${c1} 
done ) | influx -precision rfc3339 -port 50010 -database Ttest10w8

运行此脚本时,我在命令行中获得如下输出:

name: INFO
time                 count
----                 -----
1970-01-01T00:00:00Z 42000
1970-01-01T00:00:00Z 43007
1970-01-01T00:00:00Z 44010
1970-01-01T00:00:00Z 45015
1970-01-01T00:00:00Z 46015

我想获取count中的所有数字。

那是我想在运行脚本时获取所有数字(42000430074401045015),然后我将使用这些数字来在while循环结束后执行其他操作。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您只能使用grep过滤数据行(以数字开头),使用awk打印第二列并将其插入数组。

arr=();
( while((i++<5))
do
   entry=$(echo ${c1} | grep -P "^\d" | awk '{print $2}')
   arr+=($entry) 
done ) ...
echo ${arr[@]}

答案 1 :(得分:0)

我不会为此使用while循环。

要打印c1四次:

printf '%s\n' "$c1"{,,,}

或者,要打印c1 n次:

printf "%.0s${c1//%/%%}\n" $(seq n)

要获取count列的内容:

awk 'NR>3{print $2}'

要将输出读取到数组中:

readarray my_array

将它们放在一起:

readarray my_array < <( printf '%s\n' "$c1"{,,,} | influx args | awk 'NR>3{print $2}' )