我正在编写一个脚本来唤醒 LAN 上的不同 LC。MAC 地址很难记住,所以我自己制作了一个列表,其中包含有关各个 PC 的信息。现在列表如下所示:
dragoner xxx.xxx.xxx.xxx xx:xx:xx:xx:xx:xx
theseus yyy.yyy.yyy.yyy yy:yy:yy:yy:yy:yy
...
这意味着,新条目将始终采用以下形式:netbios-name ipv4 mac
。优点是,这样的列表可以通过grep
和轻松查询awk
。
我更希望有这样一个列表:
netbios=dragoner ip4=xxx.xxx.xxx.xxx mac=xx:xx:xx:xx:xx:xx
netbios=theseus mac=yy:yy:yy:yy:yy:yy ip4=yyy.yyy.yyy.yyy
...
通过这种方式,可以更轻松地添加新信息,并且行不必具有一定数量的列......但我无法通过 awk 查询它。
答案1
无论哪种列表格式,你都应该能够搜索它。我不确定你想做什么做过去简单的查找,但由于它们的相对格式,MAC 地址总是包含:
,IP.
和 netbios 应该清除两者。
什么不行grep '1.2.3.4' mylist
?
你可以对此非常严厉,并做类似的事情:
source <(grep '1.2.3.4' mylist)
echo "$netbios $ip"
答案2
awk '{
delete fields
for (i=1; i<=NF; i++) {
split($i, f, /=/)
fields[f[1]] = f[2]
}
# do something with fields["ipv4"], fields["mac"], fields["netbios"]
}' filename
或者,不要使用 awk,而使用 bash
while IFS= read -r line; do
eval "declare $line"
# do something with $ipv4, $mac, $netbios
done < filename