awk语法中的awk + ​​OR操作

时间:2011-12-13 10:55:21

标签: awk

我创建了以下awk命令,以便仅打印与主机和ETH参数匹配的行

我的问题是我不知道哪个eth1-8是真正的论点

如果ETH可以是eth0或eth1或eth2 ....等,直到eth8

,如何通过awk打印文件中的行
 HOSTNAME=linux1
 LAN=eth0|eth1|eth2|eth3|eth4|eth5|eth6|eth7|eth8

 awk -v host=$HOSTNAME -v ETH=$LAN  '$2 == host && $3 == ETH'  file



 more file


192.17.200.10  linux1 eth0
192.17.200.10  linux1 eth1
192.17.200.11  linux2 eth2
192.17.200.12  linux3 eth3
192.17.200.13  linux4 eth4
192.17.200.14  linux5 eth5
192.17.200.15  linux6 eth6
192.17.200.16  linux7 eth7
192.17.200.17  linux8 eth8

2 个答案:

答案 0 :(得分:1)

使用awk:

hostname=linux1
lan=eth

 awk -v host="$hostname" -v lan="$lan" '$2==host && ($3~lan)' yourFile

实际上对你的问题,grep也有效:

 grep -P 'linux1\s.*?eth\d' yourFile

如果你想在grep中使用变量:

grep -P  "${hostname}\s.*${lan}\d" yourFile

答案 1 :(得分:0)

使用正则表达式指定可能的匹配项,例如:

awk '$2 == "linux1" && $3 ~ /^eth[0-8]$/'

就shell变量而言,你需要类似的东西:

LAN='^eth[0-8]$'
awk -v host=$HOSTNAME -v ETH=$LAN '$2 == host && $3 ~ ETH' file