Usando linhas individuais das saídas do grep

2

Estou tentando pegar linhas do grep e classificá-las em outro comando, o comando que estou usando para grepping atm é o seguinte (ainda não foi cortado o suficiente para o que eu vou usá-lo, mas isso dá melhor contexto):

iwlist wlan0 scanning | grep -oE '(ESSID:|Quality=|Encryption Key:).*'

A saída é assim (mas será alterada dependendo da localização do meu computador):

Quality=64/70 Signal Level=-49dBm
Encryption key:on
ESSID:"Hringdu_20558"
Quality=61/70 Signal Level=-48 dBm
Encryption key:on
ESSID:"SiminnEBE932"
Quality=30/70 Signal Level=-71 dBm
Encryption key:on
ESSID:"Siminn106C46
Quality=28/70 Signal Level=-83 dBm
Encryption key:on
ESSID:"SiminnECC63F"

Eu quero usar essas linhas individualmente para executar outro comando

$ssid=$(zenity --list --text "Available Networks" --list --column "ESSID" --column "Secure" --column "Signal" "$ESSID" "$ENC" "$Signal");

Estes são os começos de um prompt de seleção de rede sem fio rapidinha. $ ESSID / $ ENC / $ Signal seria baseado na saída do grep anterior, então o que eu preciso fazer essencialmente depois de trabalhar com o grep é um pouco mais parecido com isso no final depois de cortá-lo com o comando cut / awk / sed:

91%
on
Hringdu_20558

(nota: recebo a porcentagem multiplicando 64 por 10 e depois dividindo por 7; 64 * 10/7)

É aplicar essas linhas recursivamente para cada ESSID detectado no comando zenity via script. E para adicionar aos problemas; Como você pode notar que a saída do grep está em ordem reversa do comando zenity, então isso significa que "Hringdu_20558" teria que ir primeiro, e "87%" teria que ser o último.

Em outras palavras, neste cenário específico, eu preciso de alguma forma pegar a terceira linha da saída do grep, e anexá-la ao outro comando, depois trabalhar as duas linhas anteriores e repetir isso na terceira linha depois da linha Eu comecei até que não houvesse mais linhas.

Em essência, o comando final do zenity deve ser parecido com algo baseado nas saídas acima:

$ssid=$(zenity --list --text "Available Networks" --list --column "ESSID" --column "Secure" --column "Signal" "Hringdu_20558" "on" "91%" "SiminnEBE932" "on" "87%" "Siminn106C46" "on" "43%" "SiminnECC63F" "on" "40%");

Como posso fazer isso? Pode ser feito apenas com scripts básicos de shell?

    
por Cestarian 30.08.2015 / 16:07

1 resposta

1

Eu acabo com algo assim:

ssid=$(iwlist wlan0 scanning |
awk -F: '
BEGIN{ printf "zenity --list --text \"Available Networks\" --list --column ESSID --column Secure --column Signal "; }
/Quality/{ split($0,x,"="); Quality = int(x[2]*100/70+.5); }
/Encryption/{ Encryption = $2; }
/ESSID/{ ESSID = $2;
         printf "%s \"%s\" \"%s%%\" ", ESSID, Encryption, Quality
}' |
sh)

Realmente não usa o grep, mas faz o que você quer.

    
por 30.08.2015 / 16:33