shell - 从文件中提取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名称。我有一个非常粗暴的方法。这就是我正在做的事情。运行cat
和awk
两次。我想知道这样做的更好方法是什么。此外,如果文件中有 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>
解决方案
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
推荐阅读
- sql - SQL 输出问题
- mysql - 'WHERE' 子句不适用于这两个条件
- python - 安装 opticspy 时遇到问题
- javascript - 我有一个公式来计算多个用户生成的值,当我尝试将值相加时,它只是将两者连接起来
- validation - ASP.NET Core 2.2 Razor 页面 - IP 地址的用户输入验证
- powershell - 无法输出到 CSV 文件。我知道输出是一个大括号“集合”,但我很难过
- r - 如何将多行转换为列
- java - 从 javax.json.JsonArray 转换为 org.json.JSONArray
- image - 如何查看 WLT(小波压缩图像)文件?
- excel - 坚持使用 excel 审计历史跟踪器