【问题标题】:nslookup and awk get 2nd addressnslookup 和 awk 获得第二个地址
【发布时间】:2020-08-03 21:55:54
【问题描述】:

我正在尝试从我的nslookup 的以下结果中获取地址

这里我要获取的是第二个地址,即10.0.45.45

Server:         10.152.183.10
Address:        10.152.183.10#53

Name:   pg-master-0.pg-master-headless.postgres.svc.cluster.local
Address: 10.1.45.45

这是我的代码

MASTER_HOST=$(nslookup pg-master-0.pg-master-headlesss | awk '/^Address:/ {A=$2}; END {print A}');

echo $MASTER_HOST

不幸的是,我的输出是:

10.152.183.10#53

我在这里登录到 pod 然后以这种方式运行 nslookup。

【问题讨论】:

    标签: linux kubernetes awk nslookup


    【解决方案1】:

    如果您想要 nslookup 输出中的第二个“地址:”,您可以简单地执行以下操作:

    awk '/^Address/{n++; if (n==2){print $2; exit}}'
    

    检查该行是否以Address 开头,然后增加一个计数器n++,当n == 2 输出第二个字段并退出。

    使用/输出示例

    使用名为 nslookup.txt 的文件中的数据,您将收到以下信息:

    $ awk '/^Address/{n++; if (n==2){print $2; exit}}' nslookup.txt
    10.1.45.45
    

    当然,使用nslookup 您只需将输出通过管道传输到awk。例如,如果我想要本地子网上的机器 valkyrie 的 IP,我会使用:

    $ nslookup valkyrie | awk '/^Address/{n++; if (n==2){print $2; exit}}'
    192.168.6.135
    

    查看一下,如果您还有其他问题,请告诉我。

    【讨论】:

    • 我试过这个MASTER_HOST=$(nslookup pg-master-0.pg-master-headlesss | awk '/^Address/{n++; if (n==2){print $2; exit}}'); 然后输出它echo $MASTER_HOST 但它给了我空白的结果
    • 向我展示nslookup pg-master-0.pg-master-headlesss 的完整输出,将其添加到您的问题中——最后。 nslookup 输出有些不同。如果你得到空白输出,那是因为行首没有第二个Address
    • 嗨,大卫,我在问题中添加了屏幕截图。展示我如何运行nslookup
    • 没有理由截图中显示的内容不应该以相同的方式工作吗?如果"Address" 之前可能有空格,您可以将正则表达式更改为/^\s*Address/ 以处理这种可能性。但我在这里看不到带有nslookup 的空格。
    • 我能想到的解决方法是 nslookup pg-master-0.pg-master-headless | awk 'FNR == 5 {print $2}' 它给了我第 5 行和第二个参数,即我正在寻找的地址但是想检查是否返回我得到的是真的来自Address
    【解决方案2】:

    看起来nslookup 无法解析pg-master-0.pg-master-headlesss。您可能正在从不同的 pod 或您的个人服务器/机器上运行操作,这些服务器/机器不知道集群中运行的服务。 (您的笔记本电脑在您的 K8s 集群中不使用 CoreDNS)

    您可以尝试从集群中的 pod 运行脚本并使用完整的 FQDN 以确保安全:

    $ kubectl run -i --tty --rm debug --image=ubuntu --restart=Never -- bash
    #
    # apt update; apt -y install dnsutils # Installs dnslookup ...
    # export MASTER_HOST=$(nslookup pg-master-0.pg-master-headless.postgres.svc.cluster.local | awk '/^Address:/ {A=$2}; END {print A}'); echo $MASTER_HOST"
    

    【讨论】:

    • 我尝试在我的第二个 pod 中做 exec 然后尝试 nslookup 它给了我结果 Name: pg-master-0.pg-master-headless.postgres.svc.cluster.local Address: 10.1.45.45
    • 根据我最初的查找,我得到10.152.183.10#53,这不是实际的ip,但我认为服务器ip..我需要得到10.1.45.47,这是我上面命令的第二个地址
    • 嗯,您还有问题吗?您是否尝试过其他答案中的 awk 脚本?
    • 是的,我做到了.. 结果有点像nslookup pg-master-0.pg-master-headless | awk 'FNR == 5 {print $2}' 不知道我要找的Address 是否总是在第 5 行。但这目前就足够了。
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2014-05-06
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多