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

问题描述 投票:0回答:2

我写了一个脚本如下:

#!/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循环结束后我将使用这些数字来做其他事情。

我怎样才能做到这一点?

bash shell
2个回答
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}' )

0
投票

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

arr=();
( while((i++<5))
do
   entry=$(echo ${c1} | grep -P "^\d" | awk '{print $2}')
   arr+=($entry) 
done ) ...
echo ${arr[@]}
© www.soinside.com 2019 - 2024. All rights reserved.