Analisando a saída do SQLite

2

Usando a opção -line Eu recebo essa saída do SQLite:

row1_column1 = valueA
row1_column2 = valueB

row2_column1 = valueC
row2_column2 = valueD

Portanto, uma linha para cada valor de coluna e linhas de resultado é separada por uma linha em branco. Eu preciso obter essa saída em uma matriz ou lista contendo

valueA,valueB
valueC,valueD

Além disso, os valores não numéricos (!) devem estar entre 'e'. Qualquer maneira simples de fazer isso? Obrigado por qualquer dica!

    
por stefan.at.wpf 09.09.2012 / 17:30

1 resposta

3

O script awk a seguir faz o que você quer e até escapa de citações em strings:

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

(A expressão regular numérica não suporta valores de ponto flutuante).

Mas a maneira mais simples de fazer isso não usa -line , mas as citações SQL internas do SQLite:

sqlite3 -separator , -list my.db 'select quote(col1),quote(col2) from mytab;'
    
por 09.09.2012 / 19:15