SQLite | SQLite 명령어 | SELECT 문의 실행 결과를 파일로 출력 (.output 명령)

커멘드 라인 도구에서 SELECT 문을 실행하거나 SQLite 명령을 실행하면 그 결과는 화면에 표시되지만, .output 명령을 사용하여 화면 대신 파일로 출력하도록 변경할 수 있다. 여기에서는 .output 명령을 사용하여 출력을 파일로 변경하는 방법에 대해 설명한다.

출력을 파일로 변경

SELECT 문 등의 실행 결과를 화면에서 파일로 변경할 수 있는 .output 명령의 사용법은 다음과 같다.

.output ?FILENAME?

인수에는 출력할 파일명을 지정한다. 파일명은 SQLite 명령 라인 도구를 실행한 현재 디렉터리로부터의 상대 경로 또는 절대 경로로 지정한다. 출력을 파일 대신에 화면으로 되돌릴려면 인수에 stdout을 지정한다.

예를 들어, 파일을 /Users/devkuma/test/sqlite/logdata.txt로 할 경우에는 다음과 같이 실행한다. 아래는 현재 디렉터리가 /Users/devkuma/pg/sqlite3의 경우이다.

절대 경로의 경우 :

.output /Users/devkuma/testsqlite/logdata.txt

상대 경로의 경우 :

.output ../../test/sqlite/logdata.txt

  파일명을 지정하여 .output 명령을 실행하면 SELECT 문 실행 결과뿐만 아니라 화면에 출력되어 있던 것은 모두 지정된 파일에 저장된다. 지정된 파일이 존재하지 않을 경우에는 새 파일을 생성한 후에 출력되고, 지정된 파일이 존재하는 경우에는 추가되어 출력된다.

현재 설정되어 있는 대상을 확인하고 싶은 경우에는 .show 명령을 사용한다.

.show
sqlite> .show
        echo: off
         eqp: off
     explain: auto
     headers: off
        mode: list
   nullvalue: ""
      output: stdout
colseparator: "|"
rowseparator: "\n"
       stats: off
       width: 
    filename: newdb.sqlite3
sqlite> 

output 항목을 보면 현재의 설정은 stdout으로 되어 있어서 현재에는 뭔가 출력이 되면 화면에 표시된다.

이 .show 명령의 실행 결과를 화면에 표시되어 있으며, 다음과 같이 SELECT 문을 실행한 경우에도 결과는 화면에 표시된다.

select * from user;
sqlite> select * from user;
devkuma|28|Seoul
kimkc|22|Busan
araikuma|32|Seoul
happykuma|23|Seoul
mykuma|23|Daejeon
sqlite> 

그러면 출력을 파일로 변경하려고 한다. 이번에는 현재 디렉터리의 logdata.txt라는 파일명으로 출력하도록 한다.

.output ./logdata.txt
sqlite> .output ./logdata.txt
sqlite> 

그러면 방금과 같은 SELECT 문을 실행해 본다. 이번에는 결과가 화면에 표시되지 않는다. 실행 결과는 대상으로 지정한 파일에 기록되어 있다.

select * from user;
sqlite> select * from user;
sqlite> 

현재 디렉터리에 logdata.txt라는 파일이 생성된다. 이번은 원래 존재하지 않는 파일에 출력 했으므로 새 파일이 생성되어 있다.

$ ls -al
total 5056
drwxr-xr-x@  8 kimkc  staff      272 11  4 23:06 .
drwxr-xr-x   9 kimkc  staff      306 10 17 23:49 ..
drwxr-xr-x  26 kimkc  staff      884 11  4 23:06 bak
-rw-r--r--@  1 kimkc  staff       87 11  4 23:05 logdata.txt
-rw-r--r--   1 kimkc  staff    16384 11  4 22:38 newdb.sqlite3
-rwxr-xr-x@  1 kimkc  staff   691768 10 11 18:31 sqldiff
-rwxr-xr-x@  1 kimkc  staff  1152260 10 11 18:32 sqlite3
-rwxr-xr-x@  1 kimkc  staff   719796 10 11 18:31 sqlite3_analyzer
$ 

logdata.txt 파일을 텍스트 편집기에서 열면 다음과 같이 SELECT 문을 실행 한 결과가 기록되어 있다.

devkuma|28|Seoul
kimkc|22|Busan
araikuma|32|Seoul
happykuma|23|Seoul
mykuma|23|Daejeon

현재 설정을 확인하려고 한다. 다음과 같이 .show 명령을 실행한다.

.show
sqlite> .show
sqlite> 

.show 명령의 실행 결과를 화면 대신에 파일로 출력이 되기 때문에 화면에 아무것도 표시되지 않는다. 현재 설정된 logdata.txt 파일을 텍스트 에디터로 열어 본다.

devkuma|28|Seoul
kimkc|22|Busan
araikuma|32|Seoul
happykuma|23|Seoul
mykuma|23|Daejeon
        echo: off
         eqp: off
     explain: auto
     headers: off
        mode: list
   nullvalue: ""
      output: ./logdata.txt
colseparator: "|"
rowseparator: "\n"
       stats: off
       width: 
    filename: newdb.sqlite3

아까와 달리 파일이 이미 존재하고 있기에 기존의 파일에 추가되기에 .show 명령의 실행 결과를 출력하고 있다. output 항목을 보면 파일명에 설정되어 있는 것을 확인할 수 있다.

출력을 화면으로 되돌리기

.output 명령을 사용하여 출력 변경이 유효한 것은 데이터베이스에 연결되어 있는 동안뿐이다. 데이터베이스에 연결되어 있는 동안 또는 출력을 파일에서 화면에 되돌리기를 할 경우에는 stdout을 인수로 지정하여 .output 명령을 실행한다.

.output stdout
sqlite> .output stdout
sqlite> 

이것으로 출력이 파일에서 화면에 되돌아 왔다. 그럼 다시 SELECT 문을 실행해 보자.

select * from user;
sqlite> select * from user;
devkuma|28|Seoul
kimkc|22|Busan
araikuma|32|Seoul
happykuma|23|Seoul
mykuma|23|Daejeon
sqlite> 

SELECT 문 실행 결과를 화면에 표시되었다.




최종 수정 : 2019-11-13