Ao executar, iw help
você vê um aviso:
Você não screenscrape esta ferramenta, não consideramos seu estábulo de saída.
Existem duas seções abaixo: Primeiro, solucione o problema iw
e, em seguida, responda à sua pergunta. Ambos funcionam tanto com o tradicional awk
quanto com (o padrão) GNU Awk
.
Solução para o seu problema
Eu usaria em iwconfig
vez de iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
Resultado
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
Notas
Fiquei confuso se você deseja que os valores sejam separados por ,
ou melhor, uma guia (o que seria \t
), escolhi ,
os espaços sem e ao redor aqui. Se isso não é o que você queria apenas mudar s","f
nesse sentido, s
é o Signal
e f
o Frequency
valor lá.
Também mudei o redirecionamento, dessa forma, o arquivo não precisa ser aberto em cada execução, mas apenas uma vez.
Explicações da awk
peça
-F'[ :=]+'
- define um delimitador de campo diferente, aqui para um ou mais ( +
) dos três caracteres entre colchetes
/Freq/{gsub("\\.","");f=$5}
- nas linhas com “Freq”, substitua cada ponto por nada (porque a frequência na iwconfig
saída usa um ponto como separador de milhares) e salve o conteúdo da quinta coluna na variávelf
/Signal/{s=$7}
- nas linhas com "Sinal", salve o conteúdo da sétima coluna na variável s
END{print s","f}
- depois de processar a entrada, print
as variáveis s
e f
com uma vírgula literal entre elas
Responda a sua pergunta
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
Resultado
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
Explicações da awk
peça
/freq/{f=$2}
- na (s) linha (s) com freq
, salve a segunda coluna (separada por espaço) na variávelf
/signal/{s=$2}
- na (s) linha (s) com signal
, salve a segunda coluna na variávels
END{print s","f}
- depois de processar a entrada, print
as variáveis s
e f
com uma vírgula literal entre elas