Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在列1中查找字符串,在awk中打印列2_Macos_Awk - Fatal编程技术网

Macos 在列1中查找字符串,在awk中打印列2

Macos 在列1中查找字符串,在awk中打印列2,macos,awk,Macos,Awk,我在Mac电脑上,我想在CSV文件中搜索字符串旁边的字段 这将是一个具有硬路径的单个文件;下面是一个例子: 84:a5:7e:6c:a6:b0, AP-ATC-151g84 84:a5:7e:6c:a6:b1, AP-A88-131g84 84:a5:7e:73:10:32, AP-AG7-133g56 84:a5:7e:73:10:30, AP-ADC-152g81 84:a5:7e:73:10:31, AP-D78-152e80 因此,如果我的搜索字符串是“84:a5:7e:73:10:3

我在Mac电脑上,我想在CSV文件中搜索字符串旁边的字段

这将是一个具有硬路径的单个文件;下面是一个例子:

84:a5:7e:6c:a6:b0, AP-ATC-151g84
84:a5:7e:6c:a6:b1, AP-A88-131g84
84:a5:7e:73:10:32, AP-AG7-133g56
84:a5:7e:73:10:30, AP-ADC-152g81
84:a5:7e:73:10:31, AP-D78-152e80
因此,如果我的搜索字符串是
“84:a5:7e:73:10:32”
我想返回“AP-AG7-133g56”

我一直在使用Applescript,但也许一个shell脚本就可以了

我只需要正确的语法来打开文件并让awk搜索它。同样,我在shell命令如何运行、它们必须如何执行等方面在概念上很薄弱

此错误给了我(“未找到命令”):


谢谢你对我的溺爱…

这是一个相对简单的问题:

awk '$1 == "70:56:81:cb:a2:dc," {print "The answer is "$2}' 'BSSIDtable.csv'
(答案是“如果您只想查看数据,则可以省略文本,但这将向您展示如何在需要时获得更方便用户的输出)

之所以包含逗号,是因为
awk
使用空格作为分隔符,因此逗号成为第1列的一部分

如果要查找的对象位于shell变量中,则可以使用
-v
将其作为
awk
变量提供给
awk

lookfor="70:56:81:cb:a2:dc,"
awk -v mac=$lookfor '$1 == mac {print "The answer is "$2}' 'BSSIDtable.csv'
另外,您的AppleScript解决方案可能不起作用,因为
$1/$2
被解释为shell变量,而不是
awk
变量。如果您坚持使用AppleScript,那么您必须弄清楚如何构造一个正确引用
awk
命令的shell命令

我的建议是直接使用shell,如果sed可用,精通shell的人数几乎肯定远远超过精通AppleScript:-)

(通常在mac上,如果没有在OP中标记事件)

简单但可以读取所有文件

sed -n 's/84:a5:7e:73:10:32,[[:blank:]]*//p' YourFile
在第一次出现后退出(因此在大文件上平均快50%)

awk


默认情况下,如果存在正则表达式,则将$0作为比较测试,只需添加
^
以获取第一个字段内容

Thnx Diablo!但是在脚本中我应该在哪里指出我正在搜索的文件呢?@nuthindoin,我已经在答案中添加了这一点,这是
awk
本身的一个额外参数。再次感谢。最后一个请求,请原谅我对shell的无知,但是如果我想在awk结果之前加上一些文本,比如“答案是”或其他什么。。。这将如何编码?@nuthindoin,没问题,请参阅更新,这只是在
打印
输出中添加前缀字符串的问题。当然,这两个步骤无法协同工作。这段代码可以工作,找到BSSID:
myBSSID=
/System/Library/privateframframeworks/Apple80211.framework/Versions/A/Resources/airport-I | grep BSSID | awk'{print$2}``但是当我尝试获取该变量(myBSSID)并将其传递给Diablo的代码时,我会得到EOF错误
awk'$1==“$myBSSID,{print”您已连接到“$2}”/Users/russell/Desktop/BSSIDtable.txt'
sed -n 's/84:a5:7e:73:10:32,[[:blank:]]*//p' YourFile
sed -n -e '/84:a5:7e:73:10:32,[[:blank:]]*/!b' -e 's///p;q' YourFile
awk '/^84:a5:7e:73:10:32/ {print $2}'
# OR using a variable for batch interaction
awk -v Src='84:a5:7e:73:10:32' '$1 == Src {print $2}'
# OR assuming that case is unknow
awk -v Src='84:a5:7e:73:10:32' 'BEGIN{IGNORECASE=1} $1 == Src {print $2}'