假设一个日志结果包括几个用通配符分隔的列。对于某些列,如 PREEMPTIBLE、EXTERNAL_IP,有时它们有值,有时它们没有。请参阅下面的示例。在这种情况下,如何获取 INTERNAL_IP 等其他列?
run: gcloud compute instances list --project=XXX, get:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
Name1 zone1 type1 true 5.6.7.8 1.2.3.4 RUNNING
Name2 zone1 type1 true 6.5.8.7 RUNNING
Name3 zone2 type2 6.5.8.7 RUNNING
事实上,如果所有列都非空,那么我可以使用以下方法获取 INTERNAL_IP:
gcloud compute instances list --project=XXX |tr -s ' ' |awk -F' ' '{if (NR>1)print $5}'
因为 INTERNAL_IP 是第 5 列,或者
gcloud compute instances list --project=XXX |tr -s ' ' |awk -F' ' '{if (NR>1)print $(NF-2)}'
因为 INTERNAL_IP 是最后一列的第三个
但是如果像 PREEMPTIBLE 和 EXTERNAL_IP 这样的列有空字符串,或者有时它们是完全空的,那么很难解析像 INTERNAL_IP 这样的列,因为对于某些行 INTERNAL_IP 是第 5 列,对于某些行 INTERNAL_IP 是第 4 列,等
那么,在这种情况下如何获得 INTERNAL_IP?谢谢。
答案 0 :(得分:2)
您可以在第一行获取 INTERNAL_IP 的索引,并在以下几行使用它来访问内部 ip:
gcloud compute instances list --project=XXX |\
awk 'NR==1{ii=index($0,"INTERNAL_IP")}NR>1{$0=substr($0,ii);sub(" +.*","");print}'