Під час запуску iw help
ви бачите попередження:
Ви НЕ screenscrape цього інструменту, ми не вважаємо його виходом стабільними.
Нижче наведено два розділи : Спочатку вирішення проблеми уникнення iw
та другий відповідь на ваше запитання. Обидва працюють як з традиційними, awk
так і з (за замовчуванням) GNU Awk
.
Вирішення вашої проблеми
Я б використав iwconfig
замість iw
:
while sleep 1; do
iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
done >>log.csv
Вихідні дані
$ iwconfig wlan0 | awk -F'[ :=]+' '/Freq/{gsub("\\.","");f=$5}/Signal/{s=$7}END{print s","f}'
-44,2412
Примітки
Я заплутався, хочете ви, щоб значення розділилися ,
або, скоріше, була вкладка (яка була б \t
), я вибрав ,
тут і навколишні пробіли. Якщо це не те , що ви хотіли просто змінити s","f
відповідним чином , s
це Signal
і значення там.
Я також перемістив переадресацію, таким чином файл не потрібно відкривати при кожному запуску, а лише один раз.f
Frequency
Пояснення awk
частини
-F'[ :=]+'
- встановлює інший роздільник поля, тут один або кілька ( +
) трьох символів, укладених у квадратні дужки
/Freq/{gsub("\\.","");f=$5}
- у рядках (іх) з "Freq" замініть кожну крапку нічим (оскільки частота у iwconfig
висновку використовує крапку як роздільник тисяч) і збережіть вміст п'ятого стовпця в зміннійf
/Signal/{s=$7}
- у рядках (іх) з "Сигналом" збережіть вміст сьомого стовпця в змінній s
END{print s","f}
- після обробки вхідних даних, print
змінних s
і f
з буквальною комою між ними
Відповідь на ваше запитання
while sleep 1; do
iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
done >>log.csv
Вихідні дані
$ iw dev wlan0 link | awk '/freq/{f=$2};/signal/{s=$2}END{print s","f}'
-43,2412
Пояснення awk
частини
/freq/{f=$2}
- у рядках (их) freq
зберегти другий стовпець (пробіл) у зміннійf
/signal/{s=$2}
- у рядках (их) signal
зберегти другий стовпчик у зміннійs
END{print s","f}
- після обробки вхідних даних, print
змінних s
і f
з буквальною комою між ними