Podczas uruchamiania iw help
pojawia się ostrzeżenie:
Czy nie screen tego narzędzia, nie uważamy jej stabilny sygnał wyjściowy.
Poniżej znajdują się dwie sekcje : po pierwsze rozwiązanie problemu pozwalającego uniknąć problemu, iw
a następnie odpowiedź na pytanie. Oba działają zarówno z tradycyjnym, awk
jak i (domyślnym) GNU Awk
.
Rozwiązanie twojego problemu
Użyłbym iwconfig
zamiast iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
Wynik
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
Notatki
Byłem zdezorientowany, czy chcesz, aby wartości były oddzielone, ,
czy raczej tabulatorem (który byłby \t
), wybrałem tutaj ,
bez i otaczających spacji tutaj. Jeśli nie jest to, co chciał po prostu zmienić s","f
odpowiednio, s
jest Signal
i wartość tam.
Przeniesiłem również przekierowanie, w ten sposób plik nie musi być otwierany przy każdym uruchomieniu, ale tylko raz.f
Frequency
Objaśnienia awk
części
-F'[ :=]+'
- ustawia inny ogranicznik pola, tutaj na jeden lub więcej ( +
) z trzech znaków zawartych w nawiasach kwadratowych
/Freq/{gsub("\\.","");f=$5}
- w wierszu (wierszach) „Freq” zamień każdą kropkę na nic (ponieważ częstotliwość na iwconfig
wyjściu używa kropki jako separatora tysięcy) i zapisz zawartość piątej kolumny w zmiennejf
/Signal/{s=$7}
- w wierszu (wierszach) z „Signal”, zapisz zawartość siódmej kolumny w zmiennej s
END{print s","f}
- po przetworzeniu danych wejściowych print
zmienne s
i f
dosłowny przecinek między nimi
Odpowiedz na swoje pytanie
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
Wynik
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
Objaśnienia awk
części
/freq/{f=$2}
- w wierszu (wierszach) za pomocą freq
, zapisz drugą kolumnę (oddzieloną spacją) w zmiennejf
/signal/{s=$2}
- w wierszu (wierszach) signal
, zapisz drugą kolumnę w zmiennejs
END{print s","f}
- po przetworzeniu danych wejściowych print
zmienne s
i f
dosłowny przecinek między nimi