2014-01-30 2 views
0

Я отчаянно пытаюсь выполнить цикл запросов sql ... Он работает достаточно хорошо, за исключением того, что vars с пробелами в строках делают меня странным выходом ... как если бы они считались массивами или что-то в этом роде ... Есть идеи ??Shell - Looping через sql result

echo "SELECT shop_id, shop_address1, shop_address2, shop_zip, shop_city FROM base.table" | mysql -h hostname -u user -ppassword | while read -r shop_id shop_address1 shop_address2 shop_zip shop_city; 
do 
     echo $shop_address1 
done 
+0

Можете привести нам пример? Результат команды 'mysql' будет полезен. – dogbane

+0

Мои адреса хранятся как «1 рыночная улица» и отображаются как 1 1 10 11 (...) рынок duboce folsom (...) улица уличная улица (...). , но echo $ shop_id в порядке, у меня есть 600 строк от 1 до 600, отображаемых ... поскольку адреса странно не отображаются упорядоченными и разделены пробелами и –

ответ

0

Использование OUTFILE для извлечения в CSV

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\n' 
    FROM test_table; 

cut Затем используйте и разделитель для доступа к полям

1

Для такого рода задач, которые я использую AWK.

Например, если вы хотите, чтобы получить первые и третьи столбцы:

mysql -u <USER> -p<PASSWORD> -h <HOST> < <QUERY_FILE> | awk -F"\t" '{print $1","$3;}' - 

$ X является способом доступа к колонку Х, это как «массив обозначения».

Очевидно, что вы можете делать более сложные тайсы с помощью AWK ;-)