1

我正在使用此代码从忽略大小写的主机文件中获取 ip 条目,但它似乎不适用于 AIX

输入文件

172.23.1.230    enboprtpapzp04.digjam.com  enboprtpapzp04
#172.23.0.33    enboprtpapzp04.digjam.com  enboprt        enboprtpapzp04
172.23.1.230    enboprtpapzp04.fixture.com  enboprtpap    enboprtpapzp04

awk -v client="$client" 'BEGIN {IGNORECASE = 1}{k=0; for (i=1;i<=NF;i++){if ($i==client){print $1}; k++}}' file

请参阅下面的输出

client=ENBOPRTPAPZP04
awk -v client="$client" 'BEGIN {IGNORECASE = 1}{k=0; for (i=1;i<=NF;i++){if ($i==client){print $1}; k++}}' file

什么都没有出现

预期产出

    grep -i ENBOPRTPAPZP04 /etc/hosts | awk '{print $1}' | grep -v "^#"
172.23.1.230
172.23.1.230
4

1 回答 1

1

它在这里工作:

$ awk -v client="$client" 'BEGIN{IGNORECASE = 1} $2==client && /^[^#]/{print $1}' your_hosts
172.23.1.230
172.23.1.230

你确定你使用的是 GNU awk 吗?如果没有,您可以:

$ awk -v client="$client" 'tolower($2)==tolower(client) && /^[^#]/{print $1}' your_hosts

鉴于怨恨 - 哎呀,我的意思是最近 - 对问题的编辑和评论中提到的循环,我将添加以下内容:

$ awk -v client="$client" '{for(i=1;i<=NF;i++) if(tolower($i)==tolower(client) && $1!~/^#/)print $1}' your_new_hosts
172.23.1.230
172.23.1.230

另外,请查看下面@EdMorton 的最后一条评论以获取非循环版本。

检查/^#/可能在条件部分的操作块之外:

$ awk ... '!/^#/ {for(i=1;i<=NF;i++) if(tolower($i)==tolower(client)) print $1}' your_new_hosts
于 2017-08-28T18:34:42.143 回答