Когда я запускаю следующую команду, я ожидаю получить IP-адреса экземпляров членов ASG:
current_servers=$(aws ec2 describe-instances --instance-ids $(aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names "${asgname}" --region $region | grep InstanceId | awk -F: '{print $2}' | tr -d '\"|,' | tr -d '\n') --region $region | grep "PrivateIpAddress" | grep -v '\[' | awk -F: '{print $2}' | uniq -u | tr -d '\"|,' )
По какой-то причине я не получаю вывода.
Но если я изменю uniq -u
команда просто uniq
, то я получаю правильный результат.
От человека uniq:
-u, --unique
only print unique lines
Без команды uniq вывод будет следующим:
172.51.39.73
172.51.39.73
172.51.39.73
Таким образом, кажется (от человека uniq), что если я хочу получить только одно вхождение вывода, я должен использовать uniq -u
.
Кто-нибудь знает, почему команда так действует? что не дает мне результата, если я использую ключ "-u"?
Это не то uniq
делает. Без -u
переключатель, он объединяет несколько последующих (!) одинаковых строк в одну, а с -u
switch он опускает эти строки (поскольку они не уникальны):
sven@linux:~$ cat uniq.txt
Line1 ## these two lines are not unique.
Line1
Line2
Line1
sven@linux:~$ uniq uniq.txt
Line1
Line2
Line1
sven@linux:~$ uniq -u uniq.txt
Line2
Line1
Итак, в вашем случае, поскольку ваш IP-адрес повторяется два раза, он не будет отображаться с -u
switch, и это нормально (но не очень интуитивно понятно, как это часто бывает с такими инструментами).