逐行解析SQLite查询

4
我有一个问题,自己无法解决。我有一个包含数据的SQLite数据库,为了检索数据,我使用一个bash脚本和命令sqlite3 db "SELECT prkey FROM printers"
输出结果如下:
1
3
4
5
6
7
我需要解析每一行并将其用于我的下一个命令,而不使用> file
谢谢,Marco
3个回答

6
< p > for 循环可以工作,但它们不是非常健壮:如果输出的一行有空格,它们会中断,并且 shell 必须在开始运行循环之前将查询的整个输出存储在内存中。这两个问题很容易解决:

sqlite3 db "SELECT ..." | while read prkey; do
   echo "do stuff with $prkey"
done

+1,事实上空格会破坏for语句的使用,因此与其他答案相比,这个更正确。希望其他人也能认可。 - 0xC0000022L
你可能想要设置: IFS='|' - Melroy van den Berg

0
#!/bin/bash

for line in $(sqlite3 db "SELECT prkey FROM printers"); do
  echo "line is --> $line" # do stuff with $line
done

0

你可以在sqlite命令的返回值上使用for循环。

for prkey in `sqlite3 db "SELECT prkey FROM printers"`; do
    echo $prkey; #replace with your command
done;

1
最好使用 $() 而不是反引号。后者已经被弃用。 - SiegeX
@SiegeX:你能推荐一本书/链接来支持你的论断吗?! - 0xC0000022L
@状态:当然,可以在这里查看。由于语法的两个版本都是POSIX标准,并且$()可以完成\``版本所能完成的所有操作,但更易于嵌套,因此后者已被定义为弃用。 - SiegeX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接