【问题标题】:How to include dig lookup in awk?如何在 awk 中包含挖掘查找?
【发布时间】:2014-01-07 17:05:27
【问题描述】:

我有一个 awk 命令来从挂载点提取信息(请参阅How to extract NFS information from mount on Linux and Solaris? 中接受的答案):

awk -F'[: ]' '{if(/^\//)print $3,$4,$1;else print $1,$2,$4}

我想在这个awk 命令中包含一个挖掘查找来查找主机名的IP。不幸的是,mount 命令有时包含 IP,有时包含主机名。我尝试了以下方法,但它有一个不需要的换行符、不需要的返回码,并且如果有 IP 地址则不起作用:

对于主机名

echo "example.com:/remote/export on /local/mountpoint otherstuff" | awk -F'[: ]' '{if(/^\//)print system("dig +short " $3),$4,$1;else print system("dig +short " $1),$2,$4}'

返回

93.184.216.119
0 /remote/export /local/mountpoint

对于 IP

echo "93.184.216.119:/remote/export on /local/mountpoint otherstuff" | awk -F'[: ]' '{if(/^\//)print system("dig +short " $3),$4,$1;else print system("dig +short " $1),$2,$4}'

返回

0 /remote/export /local/mountpoint

我想在这两种情况下检索以下内容

93.184.216.119 /remote/export /local/mountpoint

更新:

似乎dig 的某些版本在提供 IP 作为查询时返回 IP,而其他版本则不返回任何内容。

解决方案:

基于accepted answer,我使用了以下改编的awk 命令:

 awk -F'[: ]' '{if(/^\//) { system("dig +short "$3" | grep . || echo "$3" | tr -d \"\n\""); print "",$4,$1 } else { system("dig +short "$1" | grep . || echo "$1" | tr -d \"\n\"");print "",$2,$4  };}'

额外的grep . || echo "$3" 负责在 dig 没有返回任何内容时返回输入 IP/主机名。

【问题讨论】:

    标签: awk dig


    【解决方案1】:

    awk 中的system 命令执行命令返回其状态。考虑一下:

    $ awk 'END { print "today is " system("date") " and sunny" }' < /dev/null
    Tue Jan  7 20:19:28 CET 2014
    today is 0 and sunny
    

    date 命令输出日期和换行符。从awk 运行时,会发生同样的事情。在此示例中,systemprintf 本身之前完成,所以首先我们看到带有日期的行,在下一行我们的文本返回值为 0 的 system

    为了得到我们想要的,我们需要把它分成多个命令,我们不需要system的返回值:

    $ awk 'END { printf "today is "; system("date | tr -d \"\n\""); print " and sunny" }' < /dev/null
    today is Tue Jan  7 20:24:01 CET 2014 and sunny
    

    为了防止date 之后出现换行符,我们将其输出通过管道传输到tr -d "\n"

    长话短说,改一下:

    print system(...), $2, $4
    

    到这里:

    system(... | tr -d \"\n\"); print "", $2, $4
    

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多