SQLite 명령 ".import"는 어떻게 표준 입력에서 직접 읽나요?

SQLite 명령 ".import"는 어떻게 표준 입력에서 직접 읽나요?

함수를 어떻게 수정 csv_to_sqlite하여sqlite3주문하다.import임시 명명된 파이프가 아닌 표준 입력에서 직접 읽으시겠습니까?

#!/bin/bash

function csv_to_sqlite() {
  local database_file_name="$1"
  local table_name="$2"
  local temp_input_fifo=$(mktemp -u)
  mkfifo $temp_input_fifo
  sqlite3 -csv $database_file_name ".import $temp_input_fifo $table_name" &
  cat > $temp_input_fifo
  rm $temp_input_fifo
}

database_file_name=$1
table_name=$2

csv_to_sqlite "$database_file_name" "$table_name"
$ printf "col1,col2,col3\na,1,2.6\nb,2,5.4\n" | ./csv_to_sqlite test.sqlite test
$ sqlite3 -csv -header test.sqlite "SELECT * FROM test"
col1,col2,col3
a,1,2.6
b,2,5.4

답변1

아직 사용 중인 다른 솔루션을 찾았습니다.sqlite3 .import, 그러나 이는 읽거나 임시로 명명된 파이프를 읽지 않습니다 /dev/stdin. 대신에 다음 .import을 사용합니다 .파이프라인 운영자호출은 cat -표준 입력에서 직접 읽습니다.

#!/bin/bash

function csv_to_sqlite() {
  local database_file_name="$1"
  local table_name="$2"
  sqlite3 -csv $database_file_name ".import '|cat -' $table_name"
}

database_file_name=$1
table_name=$2

csv_to_sqlite "$database_file_name" "$table_name"

관련 정보