함수를 어떻게 수정 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"