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

(숫자 정규 표현식은 부동 소수점 값을 처리하지 않습니다.)


-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.

관련 정보