Назад | Перейти на главную страницу

Когда я использую uniq -u, я ничего не получаю, но почему?

Когда я запускаю следующую команду, я ожидаю получить 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, и это нормально (но не очень интуитивно понятно, как это часто бывает с такими инструментами).