Podczas uruchamiania iw helppojawia 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, iwa następnie odpowiedź na pytanie. Oba działają zarówno z tradycyjnym, awkjak i (domyślnym) GNU Awk.
Rozwiązanie twojego problemu
Użyłbym iwconfigzamiast 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","fodpowiednio, sjest Signali wartość tam.
Przeniesiłem również przekierowanie, w ten sposób plik nie musi być otwierany przy każdym uruchomieniu, ale tylko raz.fFrequency
Objaśnienia awkczęś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 iwconfigwyjś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 printzmienne si fdosł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 awkczęś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 printzmienne si fdosłowny przecinek między nimi