使用 -line 选项我从 SQLite 得到以下输出:
row1_column1 = valueA
row1_column2 = valueB
row2_column1 = valueC
row2_column2 = valueD
因此,每一列值占一行,结果行由空行分隔。我需要在包含的数组或列表中获取此输出
valueA,valueB
valueC,valueD
另外,非数字 (!) 值应包含在 ' 和 ' 中。有什么简单的方法可以做到这一点吗?感谢您的任何提示!
答案1
以下 awk 脚本可以执行您想要的操作,甚至转义字符串中的引号:
BEGIN { RS="\n\n"
FS="\n"
}
function field(s)
{
sub(/^[^=]*= /, "", s)
if (match(s, /^[-][0-9]+$/) == 0) {
gsub(/'/, "''", s)
s = "'" s "'"
}
return s
}
{ print field($1) "," field($2) }
(数字正则表达式不处理浮点值。)
但最简单的方法不使用-line
SQLite 的内置 SQL 引用:
sqlite3 -separator , -list my.db 'select quote(col1),quote(col2) from mytab;'
答案2
看来您只是想启用 SQLite 的 CSV 输出:
sqlite> .schema
CREATE TABLE mytable ( field1 text, field2 integer );
sqlite> .mode box
sqlite> SELECT * FROM mytable;
┌───────────┬────────┐
│ field1 │ field2 │
├───────────┼────────┤
│ some text │ 1 │
│ more text │ 2 │
└───────────┴────────┘
sqlite> .mode line
sqlite> SELECT * FROM mytable;
field1 = some text
field2 = 1
field1 = more text
field2 = 2
sqlite> .mode csv
sqlite> SELECT * FROM mytable;
"some text",1
"more text",2
从命令行:
$ sqlite3 mydatabase.db '.mode csv' 'SELECT * FROM mytable'
"some text",1
"more text",2
-csv
还可以使用命令的命令行选项设置 CSV 输出模式sqlite3
。