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