簡體   English   中英

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

[英]Find string in col 1, print col 2 in 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'"

謝謝你愛我...

這是一個相對簡單的:

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命令。

我的建議是只直接使用的外殼,人在那熟練的數量幾乎肯定遠遠多於那些的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作為比較測試,只需添加^以獲取第一個字段內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM