出力の最初の列で特定のコマンドを実行したいと思います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
問題は、行がCR-LFで終わるDOSファイルであるOUIファイルにあります。まず、行がLFで終わるように翻訳する必要があります。したがって、ファイルを使用dos2unix file
、使用、またはtr -d '\r' < file > file2
編集できます。vim
:set ff=unix
しかし、おそらくgrep
スキーマを固定する必要があります。このOUIファイルの6桁の郵便番号が誤ってOUIと一致する可能性があります。