使用bash获取数组中的查询字符串

时间:2016-05-12 16:03:15

标签: bash sqlite

我有一个带有2列表的sqlite。我想在每个变量或数组中获取列的两个值。例如:

table A
COLUMN A         COLUMN B
credit and risk  David
nothing          susan
.....

我希望获得:变量A ="信用和风险"和变量B ="大卫"然后变量A ="没有"和变量B =" susan"等等。 我尝试使用这些代码但是如果列A有空格我就无法完成字符串,例如我获得" credit"只要。我的代码:

valores=($(sqlite3 alcampo.db "select DESCRIPTION, URL  FROM SUBCATEGORYS"))

cnt=${#valores[@]}
echo "cuenta es ... $cnt"
for (( i=0 ; i<cnt ; i++ ))
do
    echo "Record No. $i: ${valores[$i]}"
    fieldA=${valores[0]}
echo "campo a es ... $fieldA"
    fieldB=${valores[1]}
echo "campo B es ... $fieldB"

done
你能帮帮我吗?感谢

1 个答案:

答案 0 :(得分:1)

可能有更好的方法来完成这项工作 听起来你不想在回音后保留变量。

while read line; do

  fieldA=$( echo "$line" | sed -n "s/\(.*\)\s\{2,\}.*/\1/p" )
  fieldB=$( echo "$line" | sed -n "s/.*\s\{2,\}\(.*\)/\1/p" )

  echo "campo A es ... ${fieldA}"
  echo "campo B es ... ${fieldB}"

done < <(sqlite3 alcampo.db "select DESCRIPTION, URL FROM SUBCATEGORYS") 

这将使您的命令“sqlite3 ...”直接进入while循环。 while循环将每行分配给变量“$ line”。

然后我们回显$ line变量并将其打包以获取我们想要的信息。 sed基于列之间有两个或更多空格......这是我根据你发布的内容划分数据的唯一方法。

  • $() - 命令替换
  • -n - 不要打印
  • s - 替换
  • \( - 开始捕获组1
  • 。* - 匹配任何内容
  • \) - 结束捕获组1
  • \ s {2,} - 2个或更多空白字符
  • 。* - 其他任何内容
  • \ 1 - 输出捕获组1
  • p - 打印

我希望这会有所帮助。让我知道。