在col 1中查找字符串,在awk中打​​印col 2

时间:2017-01-18 04:57:46

标签: 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: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'"

谢谢你溺爱我......

2 个答案:

答案 0 :(得分:2)

这个比较简单:

awk '$1 == "70:56:81:cb:a2:dc," {print "The answer is "$2}' 'BSSIDtable.csv'

(如果您只希望仅查看数据,则可以省略"The answer is "文本,但这会向您展示如何在需要时获得更加用户友好的输出。

包含逗号,因为awk使用空格分隔符,因此逗号成为第1列的一部分。

如果您要查找的内容属于shell变量,则可以使用-vawk作为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,精通的人数几乎肯定超过那些精通AppleScript的人: - )

答案 1 :(得分:0)

如果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作为比较测试,只需添加^即可获取第一个字段内容