我在 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 命令如何运行、必须如何执行等很弱
这个错误,给我("找不到命令"):
set the_file to "/Users/Paw/Desktop/AP-Decoder 3.app/Contents/Resources/BSSIDtable.csv"
set the_val to "70:56:81:cb:a2:dc"
do shell script "'awk $1 ~ the_val {print $2} the_file'"
谢谢你溺爱我...
这是一个相对简单的:
awk '$1 == "70:56:81:cb:a2:dc," {print "The answer is "$2}' 'BSSIDtable.csv'
(如果您只想查看数据,则可以省略"The answer is "
文本,但这向您展示了如果需要,如何获得更用户友好的输出)。
包含逗号是因为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,精通 shell 的人数几乎肯定远远超过精通 AppleScript 的人数:-)
如果 sed 可用(在 Mac 上正常,如果未在 OP 中标记,则为事件)
简单但读取所有文件
sed -n 's/84:a5:7e:73:10:32,[[:blank:]]*//p' YourFile
第一次出现后退出(因此在大文件上平均快 50%)
sed -n -e '/84:a5:7e:73:10:32,[[:blank:]]*/!b' -e 's///p;q' YourFile
awk
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}'
默认情况下,如果存在正则表达式,则采用 $0 作为比较测试,只需添加^
即可获取第一个字段内容