awk 忽略大小写不起作用
awk ignore case isn't working
我正在使用这段代码从忽略大小写的主机文件中获取 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 }; k++}}' file
查看下面的输出
client=ENBOPRTPAPZP04
awk -v client="$client" 'BEGIN {IGNORECASE = 1}{k=0; for (i=1;i<=NF;i++){if ($i==client){print }; k++}}' file
什么都没有
预期输出
grep -i ENBOPRTPAPZP04 /etc/hosts | awk '{print }' | grep -v "^#"
172.23.1.230
172.23.1.230
它在这里工作:
$ awk -v client="$client" 'BEGIN{IGNORECASE = 1} ==client && /^[^#]/{print }' your_hosts
172.23.1.230
172.23.1.230
您确定您使用的是 GNU awk 吗?如果没有,您可以:
$ awk -v client="$client" 'tolower()==tolower(client) && /^[^#]/{print }' your_hosts
鉴于怨恨 - 糟糕,我的意思是最近 - 对问题的编辑以及在评论中提到 循环 我将添加以下内容:
$ awk -v client="$client" '{for(i=1;i<=NF;i++) if(tolower($i)==tolower(client) && !~/^#/)print }' 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 }' your_new_hosts
我正在使用这段代码从忽略大小写的主机文件中获取 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 }; k++}}' file
查看下面的输出
client=ENBOPRTPAPZP04
awk -v client="$client" 'BEGIN {IGNORECASE = 1}{k=0; for (i=1;i<=NF;i++){if ($i==client){print }; k++}}' file
什么都没有
预期输出
grep -i ENBOPRTPAPZP04 /etc/hosts | awk '{print }' | grep -v "^#"
172.23.1.230
172.23.1.230
它在这里工作:
$ awk -v client="$client" 'BEGIN{IGNORECASE = 1} ==client && /^[^#]/{print }' your_hosts
172.23.1.230
172.23.1.230
您确定您使用的是 GNU awk 吗?如果没有,您可以:
$ awk -v client="$client" 'tolower()==tolower(client) && /^[^#]/{print }' your_hosts
鉴于怨恨 - 糟糕,我的意思是最近 - 对问题的编辑以及在评论中提到 循环 我将添加以下内容:
$ awk -v client="$client" '{for(i=1;i<=NF;i++) if(tolower($i)==tolower(client) && !~/^#/)print }' 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 }' your_new_hosts