PlayBoyXXX
@PlayBoyXXX
Школьник

В чем проблема с выводом?

Здравствуйте. Не могу понять, что я делаю не так. Мне необходимо сделать вывод данных в данном виде:
Ник IP
for((integer = 1; integer <= ${user_total}; integer++))
	do
	user_nick=$(occtl --json show users | grep 'Username' | awk -F ":" '{print $2}' | grep -E -o "([A-Z,a-z,0-9]{1,10})" | grep -v ',')
	user_IP=$(occtl --json show users | grep 'Remote IP' | awk -F ":" '{print $2}' | grep -oE '\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b')
	user_list_all=${user_list_all}"Пользователь: "${user_nick}" IP: "${user_IP}""
	done
	echo -e "${user_list_all}"

Но на выводе получается таким:

spoiler
Пользователь: Tlwrlx
Kesha1
Arken1
Yklym2
Yklym3 IP: 62.212.248.81
95.47.57.56
62.212.248.81
62.212.248.21
62.212.248.21
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
PlayBoyXXX
@PlayBoyXXX Автор вопроса
Школьник
sed -n "${integer}p"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker
Программист, энтузиаст
Для большей ясности стоило бы приести пример выхлопа команды
occtl --json show users
Чтобы отвечающим не приходилось ставить VPN-сервер и подключать тестовых пользователей.
Сходу видно, что вы запрашиваете результат в формате json, а затем парсите его грепами и awk'ом, что крайне бессмысленно и беспощадно. Почему бы не использовать jq для этой цели, а не пытаться забить шуруп молотком.
Приведенная вами проблема связана с тем, что, вероятно, выхлоп в виде json происходит без гарантии порядка ключей, а ваш способ доставать из него данные весьма варварский.

Да и проблемы в таком подходе на этом не ограничатся, ведь список пользователей может измениться между итерациями и даже между получаением имени и ip.
Следовало бы единоразово получить все сырые данне, а затем вытаскивать из них нужное.
Ответ написан
Комментировать
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Для парсинга джейсона использовать в наше время awk довольно неоптимально и муторно. Покурите jq.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы