Ao executar iw help
, você vê um aviso:
As telas não não codificam essa ferramenta, não consideramos sua saída estável.
Existem duas seções abaixo: Primeiro, uma solução para o seu problema, evitando iw
e, em segundo lugar, uma resposta à sua pergunta. Ambos trabalham com o tradicional awk
, bem como (o padrão) GNU Awk
.
Solução para o seu problema
Eu usaria iwconfig
em vez de iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\.","");f=}/Signal/{s=}END{print s","f}'
done >>log.csv
Saída
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\.","");f=}/Signal/{s=}END{print s","f}'
-44,2412
Notas
Fiquei confuso se você deseja que os valores sejam separados por ,
ou melhor, uma tabulação (que seria \t
), escolhi ,
sem e espaços adjacentes aqui. Se não é isso que você queria, basta alterar s","f
de acordo, s
é o valor Signal
e f
o Frequency
.
Eu também mudei o redirecionamento, assim o arquivo não precisa ser aberto em cada execução, mas apenas uma vez.
Explicações da awk
part
-
-F'[ :=]+'
- define um delimitador de campo diferente, aqui para um ou mais (+
) dos três caracteres entre colchetes -
/Freq/{gsub("\.","");f=}
- na (s) linha (s) com “Freq”, substitua cada ponto por nada (porque a frequência na saídaiwconfig
usa um ponto como separador de milhar) e salve o conteúdo da quinta coluna na variávelf
-
/Signal/{s=}
- na (s) linha (s) com “Sinal”, salve o conteúdo da sétima coluna na variávels
-
END{print s","f}
- depois de processar a entrada,print
as variáveiss
ef
com uma vírgula literal entre elas
Responda à sua pergunta
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=};/signal/{s=}END{print s","f}'
done >>log.csv
Saída
$ iw dev wlan0 link | awk '/freq/{f=};/signal/{s=}END{print s","f}'
-43,2412
Explicações da awk
part
-
/freq/{f=}
- na (s) linha (s) comfreq
, salve a segunda coluna (separada por espaços) na variávelf
-
/signal/{s=}
- na (s) linha (s) comsignal
, salve a segunda coluna na variávels
-
END{print s","f}
- depois de processar a entrada,print
as variáveiss
ef
com uma vírgula literal entre elas