Только что прибыл сюда в поисках решения для загрузки только подмножества столбцов, но, по-видимому, это невозможно. Итак, используйте awk (или cut
) для извлечения нужных столбцов в новый файл new_file
:
$ awk '{print $2, $5, $7, $10}' file > new_file
и загрузите файл new_file
. Вы можете направить вывод прямо в psql
:
$ cut -d \ -f 2,5,7,10 file |
psql -h host -U user -c "COPY table(col1,col2,col3,col4) FROM STDIN DELIMITER ' '" database
Обратите внимание на COPY
, а не на \COPY
.
Обновление:
Как было указано в комментариях, ни один из приведенных выше примеров не может обрабатывать разделители в кавычках в данных. То же самое касается и новых строк, поскольку awk или cut
не поддерживают CSV. Однако разделители в кавычках можно обрабатывать с помощью GNU awk.
Это файл с тремя столбцами:
$ cat file
1,"2,3",4
Используя переменную GNU awk FPAT
, мы можем изменить порядок полей (или получить их подмножество), даже если в кавычках есть разделители полей:
$ gawk 'BEGIN{FPAT="([^,]*)|(\"[^\"]+\")";OFS=","}{print $2,$1,$3}' file
"2,3",1,4
Объяснение:
$ gawk '
BEGIN { # instead of field separator FS
FPAT="([^,]*)|(\"[^\"]+\")" # ... we define field pattern FPAT
OFS="," # output field separator OFS
}
{
print $2,$1,$3 # change field order
# print $2 # or get a subset of fields
}' file
Обратите внимание, что FPAT
— это только GNU awk. Для других awks это просто обычная переменная.
person
James Brown
schedule
16.02.2017