【问题标题】:awk ignore case isn't workingawk 忽略大小写不起作用
【发布时间】:2017-08-28 18:17:41
【问题描述】:

我正在使用此代码从忽略大小写的主机文件中获取 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

【问题讨论】:

  • 预期的输出是什么? ips?
  • 为什么有人会对这个问题做出否定回答,这是一个简单的 IGNORECASE=1 不起作用的问题,我需要知道为什么,现在将其标记为否定问题有多困难?跨度>
  • @EdMorton 谢谢 sed 不是一个大问题,我可以在 awk 中替换它,我没有使用 gawk,ignorecase 在 linux 中可以正常工作,但在 AIX 中不行,还有其他方法可以在 awk 中忽略 AIX 中的大小写吗?
  • @EdMorton 感谢您的解释,我编辑了这个问题,现在看起来还可以吗?有人可以请积极投票吗?
  • @EdMorton 现在看起来还可以吗?会记住这一点,很着急,现在可以正面投票吗?

标签: awk aix ignore-case


【解决方案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

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

$ 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

【讨论】:

  • 这不是 GNU awk 这就是为什么它可能无法正常工作但 tolower 工作正常的原因,但要求是它不一定是要比较的第二列,它是所有列,它可能是 3 或 4 等等为什么我之前有循环来比较忽略大小写的字符串的每一列
  • 这并没有从您的grep 的输出中反映出来。
  • 改变了输入输出
  • FWIW 机会是 tolower($0) ~ "[[:space:]]"tolower(client)"([[:space:]]|$)" 是您真正需要的,而不是循环。祝你好运!
  • @Sid 完整的命令是:awk -v client="$client" '!/^#/ &amp;&amp; tolower($0) ~ "[[:space:]]"tolower(client)"([[:space:]]|$)" {print $1}' file
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
相关资源
最近更新 更多