【发布时间】: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/主机名。
【问题讨论】: