当我运行以下命令时,我希望获取 ASG 成员实例的 IP 地址:
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's man 提供),如果我只想获得一次输出,我必须使用uniq -u
。
有人知道为什么该命令会这样吗?如果我使用“-u”开关,为什么没有任何输出?
答案1
这不是实际的作用uniq
。如果没有-u
开关,它会将多个后续(!)相同的行合并为一行,而使用开关-u
则会省略这些行(因为它们不是唯一的):
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
,这是正常的(但不是很直观,因为这类工具通常如此)。