当我使用 uniq -u 时,我没有得到任何输出,但是为什么呢?

当我使用 uniq -u 时,我没有得到任何输出,但是为什么呢?

当我运行以下命令时,我希望获取 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,这是正常的(但不是很直观,因为这类工具通常如此)。

相关内容