awk + ИЛИ операция в синтаксисе awk - PullRequest
2 голосов
/ 13 декабря 2011

Я создал следующую команду awk для печати только строки, соответствующей хосту и параметрам ETH

моя проблема в том, что я не знаю, какой именно eth1-8 является реальным аргументом

Как напечатать строку из файла с помощью awk, если ETH может быть eth0 или eth1 или eth2 .... и т. Д. До eth8

 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 ]

1 голос
/ 13 декабря 2011

с использованием 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
0 голосов
/ 13 декабря 2011

Используйте регулярное выражение для указания возможных совпадений, например ::100100

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

В терминах переменной оболочки вам понадобится что-то вроде:

LAN='^eth[0-8]$'
awk -v host=$HOSTNAME -v ETH=$LAN '$2 == host && $3 ~ ETH' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...