@VasyaM13221

Использование утилиты GNU awk?

Доброго времени суток, задача почистить кэш у редискластера, но не могу понять почему утлита awk ведет себя не так как я ожидаю.
Вот вывод моей команды без использования утилиты awk:
user@srv:~$ docker run -i --rm --net host redis sh -c "redis-cli -h 192.168.100.79 -p 7000 cluster nodes | grep master"
08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383
d04349ce3e46ed74e6d4e16c2911d7e33865dc55 192.168.101.79:7000 myself,master - 0 0 4 connected 5461-10922
4bb9aae34f4336f30117ef5901b68c94cd1d559b 192.168.101.79:7000 master - 0 1553254294381 1 connected 0-5460


Моя первая цель взять IP и порты инстансов из вывода redis-cli, разделитель -F: (двоеточие) и я пишу так:
user@srv:~$ docker run -i --rm --net host redis sh -c "redis-cli -h 192.168.100.79 -p 7000 cluster nodes | grep master | awk -F: '{print $1 $2}'"


Но проблема в том что вывод не меняется и я на выходе получаю тот же вывод что и без использования AWK, причем что бы я не писал $1,$2,$3 - не важно!!

Единственное что может изменить вывод если я напишу '{print $0}, - только в этом случае вывод покажет три строчки с нулями:
user@srv:~$ docker run -i --rm --net host redis sh -c "redis-cli -h 192.168.100.79 -p 7000 cluster nodes | grep master | awk -F: '{print $0}'"
0
0
0


В чем может быть проблема?
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Ну дык у вас строка и делится на две
$ echo "08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383" | awk -F: '{print $1 $2}'
08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.797001 master - 0 1553254293379 2 connected 10923-16383
$ echo "08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383" | awk -F: '{print $1}'
08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79
$ echo "08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383" | awk -F: '{print $2}'
7001 master - 0 1553254293379 2 connected 10923-16383

Только вы опять делаете конкатенацию на выходе

может быть так вы имели в виду?:
$ echo "08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383" | awk '{ print $2 }' 
192.168.101.79:7001


Отдельно хост
$ echo "08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383" | awk '{ print $2 }' | awk -F: '{print $1}'
192.168.101.79


Отдельно порт
$ echo "08a7ff2732079bc7b113726352101e5302a1f5d8 192.168.101.79:7001 master - 0 1553254293379 2 connected 10923-16383" | awk '{ print $2 }' | awk -F: '{print $2}'
7001
Ответ написан
xotkot
@xotkot
хорошо есть и хорошо весьма
Моя первая цель взять IP и порты ...

в каком виде вы хотите их получить ?
по отдельности, вместе, через двоеточие, через пробел или еще как либо ?
моя телепатия подсказывает что через пробел, если это действительно так то код будет выглядеть примерно так:
... | awk -F'[ ,:]' '{print $2,$3}'
192.168.101.79 7001
192.168.101.79 7000
192.168.101.79 7000
Ответ написан
Ваш ответ на вопрос

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

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