解析 SQLite 输出

解析 SQLite 输出

使用 -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) }

(数字正则表达式不处理浮点值。)


但最简单的方法不使用-lineSQLite 的内置 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

相关内容