无法使用 gawk 对特定列执行命令

无法使用 gawk 对特定列执行命令

我想对 输出的第一列执行特定命令wpa_cli scan_results。该命令mycmd将 MAC 地址作为输入并返回 MAC 和 OUI:

# ./mycmd AC:EE:9E:11:22:33 
AC:EE:9E:11:22:33   Samsung Electronics Co.,Ltd

为了更改第一wpa_cli scan_results列,我运行以下命令:

wpa_cli scan_results| sed 1d | gawk '{"./mycmd "$1| getline $1 }1'

然而,这并不是替换第一列,mycmd而是删除第一列。

尽管我的命令在外部工作,但为什么我有一个空列而不是带有 OUI 的修改列gawk


脚本mycmd如下:

 #!/bin/bash
 cat ieee-oui.txt  | grep -i $(echo $1 | sed 's/://g' | grep -o '^......') 

答案1

问题出在OUI文件上,它是一个DOS文件,其行以CR-LF结尾。您必须首先对其进行翻译,以便各行以 LF 结尾。因此,可以使用 、dos2unix file或、或使用和tr -d '\r' < file > file2编辑文件)。vim:set ff=unix

顺便说一句,你可能应该锚定你的grep模式。此 OUI 文件中的 6 位邮政编码可能会无意中与您的 OUI 匹配。

相关内容