Я хочу выполнять команду iw dev wlan0 link непрерывно каждую секунду и сохранять вывод в файле csv.
Я использую следующую команду:
while sleep 1; do
iw dev wlan0 link | grep 'freq:\|signal' | awk '{printf "%s ", $2, $3}' >> log.csv
done
Но вывод сохраняется в log.csv следующим образом:
2412 -41 2412 -42 2412 -45 2412 -43
Я хочу, чтобы выход сохранялся таким образом, что два поля разделены запятой (чтобы они отображались в отдельном столбцы в редакторах, таких как MS Excel), и каждый из них запускается в новую строку. [F7] будет выглядеть так (вы можете игнорировать метки, они только для объяснения):
Signal Frequency
-41 2412
-42 2412
-45 2412
-43 2412
При запуске iw help вы увидите предупреждение:
Не скринируйте этот инструмент, мы не считаем его выход стабильным.Ниже приведены два раздела: сначала решение вашей проблемы, избегая iw, а затем ответ на ваш вопрос.
Я использовал бы iwconfig вместо iw: [ ! d7]
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
Я смутился, хотите ли вы, чтобы значения были разделены , или, скорее, вкладка (которая была бы [ f12]), я выбрал , без и окружающих пространств здесь. Если это не то, что вы хотели, просто измените s","f соответственно, s - это Signal и f значение Frequency. Я также переместил перенаправление, таким образом, файл не нужно открывать в каждом прогоне, но только один раз.
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
При запуске iw help вы увидите предупреждение:
Не скринируйте этот инструмент, мы не считаем его выход стабильным.Ниже приведены два раздела: сначала решение вашей проблемы, избегая iw, а затем ответ на ваш вопрос.
Я использовал бы iwconfig вместо iw: [ ! d7] 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. Я также переместил перенаправление, таким образом, файл не нужно открывать в каждом прогоне, но только один раз.
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
При запуске iw help вы увидите предупреждение:
Не скринируйте этот инструмент, мы не считаем его выход стабильным.Ниже приведены два раздела: сначала решение вашей проблемы, избегая iw, а затем ответ на ваш вопрос.
Я использовал бы iwconfig вместо iw: [ ! d7] 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. Я также переместил перенаправление, таким образом, файл не нужно открывать в каждом прогоне, но только один раз.
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