首页 > 解决方案 > 从文件中提取mac地址和网卡名称的更好方法(awk)

问题描述

我有一个文本mytest.txt文件,其内容是

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a6:4c:35", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", NAME="eth0"

我想从上面提取mac地址和nic名称。我有一个非常粗暴的方法。这就是我正在做的事情。运行catawk两次。我想知道这样做的更好方法是什么。此外,如果文件中有 2 行,我将如何处理两者。

grep address mytest.txt|awk '{print $4}'
Output
ATTR{address}=="00:50:56:a6:4c:35",
grep address mytest.txt|awk '{print $7}'
Output
NAME="eth0",

我怎样才能以更好的方式获得 MAC 地址和名称,只是用空格分隔。而且,如果文件中有 2 行,则在输出中沿行获取 2 行

<mac1> <nic_name1>
<mac2> <nic_name2>

标签: shellawkgrep

解决方案


awk -F'"' '{print $8,$(NF-1)}' mytest.awk

这使用双引号标记作为分隔符并打印第 8 个和倒数第二个字段,后者由 . 检索$(NF-1)NF是一个 awk 内置的,包含当前行的字段数,$NF最后一个字段也是如此,是倒数$(NF-1)第二个字段。

样本输出:

$ cat file
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:a6:4c:35", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="10:50:56:a6:4c:35", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", NAME="eth1"
$ awk -F'"' '{print $8,$(NF-1)}' file
00:50:56:a6:4c:35 eth0
10:50:56:a6:4c:35 eth1

推荐阅读