使用awk数组比较$NF

使用awk数组比较$NF,awk,Awk,以下命令具有以下输出: [xr-vm_node0_RP0_CPU0:~]$show_snmp_interface_notif -x .* ifName : Null0 ifIndex: 1 ifName : MgmtEth0/RP0/CPU0/0 ifIndex: 2 ifName : Loopback0 ifIndex: 5 ifName : Bundle-Ether25 ifIndex: 6 ifName : Bund

以下命令具有以下输出:

[xr-vm_node0_RP0_CPU0:~]$show_snmp_interface_notif -x .*
ifName : Null0                 ifIndex: 1
ifName : MgmtEth0/RP0/CPU0/0   ifIndex: 2
ifName : Loopback0             ifIndex: 5
ifName : Bundle-Ether25        ifIndex: 6
ifName : Bundle-Ether42        ifIndex: 7
ifName : Optics0/0/0/0         ifIndex: 8
ifName : Optics0/0/0/1         ifIndex: 9
...
ifName : HundredGigE0/0/1/3    ifIndex: 92
ifName : HundredGigE0/0/1/2    ifIndex: 93
ifName : HundredGigE0/0/1/1    ifIndex: 94
ifName : HundredGigE0/0/1/0    ifIndex: 95
ifName : Loopback1             ifIndex: 96
我想提取最后一列等于下面任何数字的行

2  6  7  52  53  54  55  56  57  89  90  91
尝试: 1确认上述元素已通过阵列[i]正确存储和打印

[xr-vm_node0_RP0_CPU0:~]$show_snmp_interface_notif -x .* | awk 'BEGIN{split("2  6  7  52  53  54  55  56  57  89  90  91",array)}; END {for (i in array) print array[i]}'
2
6
7
52
53
54
55
56
57
89
90
91
2验证$NF与最后一列匹配

[xr-vm_node0_RP0_CPU0:~]$show_snmp_interface_notif -x .* | awk '{print $NF}'
1
2
5
6
7
8
9
10
11
12
...
92
93
94
95
96
3编写了以下awk语句,该语句不打印任何内容。我怀疑打印的声明是不正确的。如果最后一列与数组[i]中的任何指定元素匹配,我们需要拉出整行

[xr-vm_node0_RP0_CPU0:~]$show_snmp_interface_notif -x .* | awk 'BEGIN{split("2  6  7  52  53  54  55  56  57  89  90  91",array)}; END {for (i in array); if(array[i]==$NF) { print $i }}'

[xr-vm_node0_RP0_CPU0:~]$show_snmp_interface_notif -x .* | awk 'BEGIN{split("2  6  7  52  53  54  55  56  57  89  90  91",array)}; END {for (i in array); if(array[i]==$NF) { print i }}'

你能试试下面的吗

awk '
BEGIN{
  num=split("2 6 7 52 53 54 55 56 57 89 90 91",array," ")
  for(i=1;i<=num;i++){
    b[array[i]]
  }
}
($NF in b)
'   Input_file


你能试试下面的吗

awk '
BEGIN{
  num=split("2 6 7 52 53 54 55 56 57 89 90 91",array," ")
  for(i=1;i<=num;i++){
    b[array[i]]
  }
}
($NF in b)
'   Input_file

删除一个;并使用每一行stdin结束运行for循环。具有您的for循环没有实体

... | awk 'BEGIN{split("2  6  7  52  53  54  55  56  57  89  90  91",array)}; {for (i in array) if(array[i]==$NF) { print }}'
输出:

ifName : MgmtEth0/RP0/CPU0/0 ifIndex: 2 ifName : Bundle-Ether25 ifIndex: 6 ifName : Bundle-Ether42 ifIndex: 7 删除一个;并使用每一行stdin结束运行for循环。具有您的for循环没有实体

... | awk 'BEGIN{split("2  6  7  52  53  54  55  56  57  89  90  91",array)}; {for (i in array) if(array[i]==$NF) { print }}'
输出:

ifName : MgmtEth0/RP0/CPU0/0 ifIndex: 2 ifName : Bundle-Ether25 ifIndex: 6 ifName : Bundle-Ether42 ifIndex: 7
这可以在没有阵列的情况下完成。如果数据来自另一个源阵列,则可以使用我的源阵列。应该更快,因为不涉及循环

your commands | awk '$NF~/^(2|6|7|52|53|54|55|56|57|89|90|92)$/'
ifName : MgmtEth0/RP0/CPU0/0   ifIndex: 2
ifName : Bundle-Ether25        ifIndex: 6
ifName : Bundle-Ether42        ifIndex: 7

这可以在没有阵列的情况下完成。如果数据来自另一个源阵列,则可以使用我的源阵列。应该更快,因为不涉及循环

your commands | awk '$NF~/^(2|6|7|52|53|54|55|56|57|89|90|92)$/'
ifName : MgmtEth0/RP0/CPU0/0   ifIndex: 2
ifName : Bundle-Ether25        ifIndex: 6
ifName : Bundle-Ether42        ifIndex: 7

@用户通常循环速度较慢,所以如果可以避免,我会这样做,但这取决于数据量。无论如何,这不那么复杂,也更容易理解。@用户通常循环速度较慢,所以如果我可以避免,我会这样做,但根据数据量的不同,这可能会有所不同。无论如何,这不那么复杂,也更容易理解。@用户不需要测试。一次数组查找的时间<用于循环所有选项或正则表达式。@用户不需要测试。循环所有选项或正则表达式的一次数组查找时间<。