Анализ mysql вывода в bash переменных разбит пробелами - PullRequest
0 голосов
/ 24 февраля 2020

Я хочу прочитать все строки в таблице и поместить их в отдельные переменные в bash, но у меня возникает проблема, когда в элементах ячейки есть пробелы:

while read id name neighbourhood city
do
        echo "ID: $id"
        echo "name: $name"
        echo "neighbourhood: $neighbourhood"
        echo "city: $city"
        echo -e "\n"
done < <(echo "SELECT id, name, neighbourhood_id, city_id FROM households" | mysql -u kong -pHarald city_planner -h 0)

Если name - это просто одно слово, все выглядит хорошо, но если в нем три отдельных слова, разделенных пробелами, оно заканчивается так, как показано ниже:

...

ID: 200
name: Durek
neighbourhood: 1
city: 2


ID: 201
name: Kong
neighbourhood: Harald
city: Rex   1   2

...

Как сделать так, чтобы все имя заканчивалось в имени переменной?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Я предлагаю сначала использовать «CONCAT», а затем «IFS», пока l oop, например:

while IFS='@' read -r id name neighbourhood city
do
    echo "ID: $id"
    echo "name: $name"
    echo "neighbourhood: $neighbourhood"
    echo "city: $city"
    echo -e "\n"

done < <( mysql -u kong -pHarald city_planner -h 0 -NBe "SELECT CONCAT(id, '@', name, '@', neighbourhood_id, '@', city_id ) FROM households")
0 голосов
/ 24 февраля 2020

если у вас есть только одна строка с пробелами, вы можете поместить их в последнюю позицию

root@localhost:~# while read id neighbourhood city name
> do
>         echo "ID: $id"
>         echo "name: $name"
>         echo "neighbourhood: $neighbourhood"
>         echo "city: $city"
>         echo -e "\n"
> done < <(echo "SELECT id, neighbourhood_id, city_id, name FROM households" | mysql -u root Bernd -N)
ID: 200
name: Durek
neighbourhood: 1
city: 2


ID: 201
name: Kong Harald Rex
neighbourhood: 1
city: 2


root@localhost:~# 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...