awk忽略情况不为';行不通

awk忽略情况不为';行不通,awk,aix,ignore-case,Awk,Aix,Ignore Case,我使用这段代码从带有ignore case的主机文件中获取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 enboprtp

我使用这段代码从带有ignore case的主机文件中获取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
它在这里起作用:

$ 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

预期的产量是多少?ips?为什么会有人对这个问题做出否定的回答,这是一个简单的问题,IGNORECASE=1不起作用,我需要知道为什么,现在作为一个问题,将其标记为否定有多困难?@EdMorton感谢sed,这不是一个大问题,我可以在awk中替换它,我没有使用gawk,IGNORECASE在linux中工作良好,但在AIX中不工作,有没有其他方法可以在awk中忽略AIX中的大小写?@EdMorton谢谢你的解释,我编辑了这个问题,现在看起来还好吗?有人能投赞成票吗?@EdMorton现在似乎没事了?请记住,当时很匆忙,现在可以进行正面投票了吗?这不是GNU awk,这就是为什么它可能不起作用,但是tolower的工作很好,但要求是它不一定是第二列进行比较,它是所有列,它可能是3或4,这就是为什么我之前让循环在每一列对忽略大小写的字符串进行比较,而忽略大小写的字符串没有从
grep
的输出中反映出来。更改输入输出fwiw的机会是
tolower($0)~“[[:space:]]”tolower(client)”([[:space:].$)“
是您真正需要的,而不是循环。祝你好运@Sid完整命令是:
awk-v client=“$client”!/^#/&&tolower($0)~“[[:space:][]”“tolower(客户端)”([[:space:][]|$)“{print$1}”文件
$ 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
$ awk ... '!/^#/ {for(i=1;i<=NF;i++) if(tolower($i)==tolower(client)) print $1}' your_new_hosts